<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5434766342184750662</id><updated>2012-02-15T23:28:47.234-08:00</updated><category term='Flash'/><category term='Japan Trip'/><category term='Web Design'/><category term='Overkill'/><title type='text'>Matthew Doll</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default?start-index=101&amp;max-results=100'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>103</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2124434751911064311</id><published>2011-03-17T08:53:00.001-07:00</published><updated>2011-03-17T08:53:38.276-07:00</updated><title type='text'>New HomeNet Blog</title><content type='html'>I've started a new blog dedicated to HomeNet over at &lt;a href="http://homenetme.blogspot.com/"&gt;http://homenetme.blogspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2124434751911064311?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2124434751911064311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2011/03/new-homenet-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2124434751911064311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2124434751911064311'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2011/03/new-homenet-blog.html' title='New HomeNet Blog'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-4561964262440404679</id><published>2011-02-03T10:32:00.000-08:00</published><updated>2011-02-03T10:38:05.157-08:00</updated><title type='text'>The Virtual Home</title><content type='html'>Everything these days is being virtualized so that we can interact with them through our electronic devices.  We have virtualized the art of letter writing into email and opening an encyclopedia into searching Wikipedia. We have virtualized ourselves on Facebook, creating a digital representation of ourselves on the internet. We post what we like and dislike about our lives. We list our attributes, what we do, where we live and where we go to school. It's a database of our friends and a history of our lives.  In video games we create 3d Avatars that represent our selves as we interact in the virtual world.&lt;br /&gt;&lt;br /&gt;It's only logical to think that one day architecture is going to be virtualized into an electronic form. What will this look like? How do we interact with our home virtually? Who is going to design it?&lt;br /&gt;&lt;br /&gt;These are questions I've been trying to answer over the last few weeks as I start working on building the user interface for HomeNet.  Currently, I'm taking the Facebook approach, building a website that allows you to create a virtual profile of your home.  The HomeNet website will allow you to create a detailed profile of your home listing all of it's rooms and properties and allow you to view and control all of the smart HomeNet devices you have.  You will be able to personalize each page with photos of your house creating a unique personal link to your home.  &lt;br /&gt;&lt;br /&gt;I think that the future architect needs to not only design how one physically interacts with the building but also how one interacts with all the electronics and technology the future home will contain. The virtual world is currently dominated by Engineers and Graphic Designers.  I think that architects need to get involved so that people have the same quality experience in the virtual building as the do in the physical building.  I'm not sure if it's the architects role to design the virtual building but I think that the architect needs to represent the owners interests in it's construction the same way an architect works with a contractor to build a physical building.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-4561964262440404679?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/4561964262440404679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2011/02/how-should-architecture-be-represended.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4561964262440404679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4561964262440404679'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2011/02/how-should-architecture-be-represended.html' title='The Virtual Home'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2956110832203641870</id><published>2011-01-18T10:55:00.000-08:00</published><updated>2011-01-18T10:55:41.723-08:00</updated><title type='text'>Arduino: The Documentary</title><content type='html'>This is a great video on the history of the Arduino project. &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/18539129?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/18539129"&gt;Arduino The Documentary (2010) English HD&lt;/a&gt; from &lt;a href="http://vimeo.com/gnd"&gt;gnd&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt; It's hard to believe that arduino didn't exist yet when I graduated high school and now it's the key piece I'm using in my Master's Project&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2956110832203641870?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2956110832203641870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2011/01/arduino-documentary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2956110832203641870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2956110832203641870'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2011/01/arduino-documentary.html' title='Arduino: The Documentary'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-7636166672116745210</id><published>2010-12-17T10:16:00.000-08:00</published><updated>2010-12-17T10:16:43.627-08:00</updated><title type='text'>Half way</title><content type='html'>Well my thesis has officially reach the half way point with the end of Master Project 1.  I presented my work to the school and had a great presentation. I had 11 demo's up and running, 8 based on JeeNode hardware and additional 3 running on Arduino (because I ran out of JeeNodes). In the coming days I'll work on posting photos, details and code demos.&lt;br /&gt;&lt;br /&gt;Currently I'm spending a week relaxing after some stressful finals and working on fixing some minor issues. This week I added better support of interrupts and started experimenting with implementing a sleep cycle to conserve battery.  Next up comes rewriting the processing script to match the updated modular Arduino code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-7636166672116745210?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/7636166672116745210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/12/half-way.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7636166672116745210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7636166672116745210'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/12/half-way.html' title='Half way'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-712267449879323815</id><published>2010-11-30T05:29:00.000-08:00</published><updated>2010-11-30T05:59:23.282-08:00</updated><title type='text'>Google Code Setup</title><content type='html'>Well I finally made the jump and got and my code setup on Google code to start sharing my HomeNet Code. You can also find some documentation on how it all works 1800 lines of code and growing...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/homenet/"&gt;Google Code: HomeNet&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-712267449879323815?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/712267449879323815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/google-code-setup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/712267449879323815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/712267449879323815'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/google-code-setup.html' title='Google Code Setup'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-5018375915206278955</id><published>2010-11-23T02:51:00.000-08:00</published><updated>2010-11-23T02:51:36.129-08:00</updated><title type='text'>Even More Modular</title><content type='html'>My last code post simplified things, but many things were hard coded in.  These weekend I modularized things so you can choose which network adapters you needs as well as what devices are connected.&lt;br /&gt;&lt;pre&gt;#include&amp;nbsp;&amp;lt;ports.&gt;&lt;span style="color: #cc6600;"&gt;h&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//#include&amp;nbsp;&amp;lt;portslcd.h&gt;&lt;/portslcd.h&gt;&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;rf12.&gt;&lt;span style="color: #cc6600;"&gt;h&lt;/span&gt;&amp;gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;homenet.&gt;&lt;span style="color: #cc6600;"&gt;h&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//#include&amp;nbsp;&amp;lt;homenetdevices.h&gt;&lt;/homenetdevices.h&gt;&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;homenetdevicelcd.&gt;&lt;span style="color: #cc6600;"&gt;h&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Start&amp;nbsp;HomeNet&amp;nbsp;Packet&amp;nbsp;Stack&lt;/span&gt;&lt;br /&gt;HomeNet&amp;nbsp;stack(0x04);&lt;span style="color: #7e7e7e;"&gt;//0x01 is RF12 base station //0xFF is PC uplink&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Setup&amp;nbsp;Network&amp;nbsp;Adapters&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//HomeNetPortSerial&amp;nbsp;portSerial(PORT_SERIAL,&amp;nbsp;stack);&amp;nbsp;&amp;nbsp;//PORT_SERIAL&amp;nbsp;tells&amp;nbsp;the&amp;nbsp;adpater&amp;nbsp;which&amp;nbsp;serial&amp;nbsp;serial&amp;nbsp;port&amp;nbsp;to&amp;nbsp;use&amp;nbsp;(for&amp;nbsp;future&amp;nbsp;support&amp;nbsp;of&amp;nbsp;the&amp;nbsp;arduino&amp;nbsp;mega)&lt;/span&gt;&lt;br /&gt;HomeNetPortRF12&amp;nbsp;&amp;nbsp;&amp;nbsp;portRF12(stack);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Setup&amp;nbsp;attached&amp;nbsp;devices&lt;/span&gt;&lt;br /&gt;HomeNetDeviceStatusLights&amp;nbsp;statusLights(stack);&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//HomeNetDeviceTMP37&amp;nbsp;tmp37(stack);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//HomeNetDeviceLight&amp;nbsp;light(stack);&lt;/span&gt;&lt;br /&gt;HomeNetDeviceLCD&amp;nbsp;lcd(stack);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//package&amp;nbsp;the&amp;nbsp;setup&amp;nbsp;info&amp;nbsp;in&amp;nbsp;a&amp;nbsp;nice&amp;nbsp;neat&amp;nbsp;arrays&lt;/span&gt;&lt;br /&gt;&amp;nbsp;HomeNetPort*&amp;nbsp;&amp;nbsp;ports[]&amp;nbsp;=&amp;nbsp;{&amp;amp;portRF12};&lt;span style="color: #7e7e7e;"&gt;//,&amp;amp;portSerial}; &lt;/span&gt;&lt;br /&gt;&amp;nbsp;HomeNetDevice*&amp;nbsp;&amp;nbsp;devices[]&amp;nbsp;=&amp;nbsp;{&amp;amp;statusLights,&amp;nbsp;&amp;nbsp;&amp;amp;lcd};&lt;span style="color: #7e7e7e;"&gt;// &amp;amp;light , &amp;amp;tmp37};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MilliTimer&amp;nbsp;sendTimer;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//initize home net with the setup info&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.init(ports,&amp;nbsp;1,&amp;nbsp;devices,&amp;nbsp;2);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.registerStatusLights(statusLights);&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//setup status lights&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//receive incoming packets&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.&lt;span style="color: #cc6600;"&gt;receive&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (sendTimer.poll(10000)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// PayloadBuffer buffer;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// buffer.print("TEST NODE 3");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// stack.addUdpPacket(0, 2, 0, CMD_STRING, buffer.payload());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//stack.schedule(2,255,0); //type, toNode, toDevice&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//process packets in the stack- send packets that ready&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.process();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(1);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/homenetdevicelcd.&gt;&lt;/homenet.&gt;&lt;/rf12.&gt;&lt;/ports.&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-5018375915206278955?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/5018375915206278955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/even-more-modular.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/5018375915206278955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/5018375915206278955'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/even-more-modular.html' title='Even More Modular'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-4976180817212839685</id><published>2010-11-18T17:52:00.000-08:00</published><updated>2010-11-18T19:46:31.718-08:00</updated><title type='text'>More Code</title><content type='html'>So the code finally reached a tipping it's time to package the code up into a library.  I'm calling it HomeNet because it describes its perfectly it's a new home net work and amazingly enough, there isn't anything going by the name yet.&lt;br /&gt;&lt;br /&gt;Compared to the long mess of code posted before, Moving most of the code to a library really simplified things:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#include&amp;nbsp;&amp;lt;&lt;span style="color: #cc6600;"&gt;ports.h&lt;/span&gt;&amp;gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;&lt;span style="color: #cc6600;"&gt;rf12.h&lt;/span&gt;&amp;gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;&lt;span style="color: #cc6600;"&gt;homenet.h&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;HomeNet&amp;nbsp;stack(0x04);&lt;span style="color: #7e7e7e;"&gt;//start stack with a node id&lt;/span&gt;&lt;br /&gt;MilliTimer&amp;nbsp;sendTimer;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// put your setup code here, to run once:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.init();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// put your main code here, to run repeatedly: &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.&lt;span style="color: #cc6600;"&gt;receive&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (sendTimer.poll(2000)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PayloadBuffer&amp;nbsp;buffer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buffer.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(123,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stack.addUdpPacket(0,&amp;nbsp;255,&amp;nbsp;2,&amp;nbsp;CMD_BYTE,&amp;nbsp;buffer.payload());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.process();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and the processing sketch using the library&lt;br /&gt;&lt;pre&gt;import&amp;nbsp;processing.serial.*;&lt;br /&gt;import&amp;nbsp;xmlrpclib.*;&lt;br /&gt;import&amp;nbsp;org.apache.commons.codec.binary.Base64;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//part of the xmlrpclib&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;XmlrpcClient&amp;nbsp;homeNetXmlrpcClient&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; XmlrpcClient(&lt;span style="color: #006699;"&gt;"http://matthew.sgcs.usf.edu/mcdportal/public/xmlrpc.php?api_key=dfgdfgdgdgd"&lt;/span&gt;);&lt;br /&gt;XmlrpcServer&amp;nbsp;homeNetXmlrpcServer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; XmlrpcServer(8081);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  NODE_ID = 255;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_TIMEOUT = 150;&lt;br /&gt;PacketStack&amp;nbsp;stack&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; PacketStack(NODE_ID);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt; myPort;  &lt;span style="color: #7e7e7e;"&gt;// The serial port&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;XMLElement&amp;nbsp;xmlConfig;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;XMLElement&amp;nbsp;commands[];&lt;br /&gt;XMLElement&amp;nbsp;devices[];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; findXMLid(XMLElement[] xml , &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; value, &lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; rAttribute){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; rValue = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; a = 0; a&lt;commands.length;a++){ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=""&gt;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(unhex(commands[a].getAttribute(&lt;span style="color: #006699;"&gt;"id"&lt;/span&gt;)) == value){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; commands[a].getAttribute(rAttribute);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; rValue;&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;size(600,&amp;nbsp;400);&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Stage size&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//noStroke();      // No border on the next thing drawn&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;homeNetXmlrpcServer.add(&lt;span style="color: #006699;"&gt;"testserver"&lt;/span&gt;, &lt;span style="color: #cc6600;"&gt;this&lt;/span&gt;); &lt;span style="color: #7e7e7e;"&gt;//setup server&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"HomeNet XML-RPC Server started at "&lt;/span&gt; + homeNetXmlrpcServer.ip()+&lt;span style="color: #006699;"&gt;":8081/RPC2"&lt;/span&gt;); &lt;span style="color: #7e7e7e;"&gt;// Note that /RPC2 is hard-coded to URI in the Apache Library.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;textFont(createFont(&lt;span style="color: #006699;"&gt;"Consolas"&lt;/span&gt;, 14));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//fixedFont);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;xmlConfig&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; XMLElement(&lt;span style="color: #cc6600;"&gt;this&lt;/span&gt;, &lt;span style="color: #006699;"&gt;"config.txt"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;devices&amp;nbsp;=&amp;nbsp;xmlConfig.getChildren(&lt;span style="color: #006699;"&gt;"devices/device"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;commands&amp;nbsp;=&amp;nbsp;xmlConfig.getChildren(&lt;span style="color: #006699;"&gt;"commands/command"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//load the above as hash table from my sevrer.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Print a list of the serial ports, for debugging purposes:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//println(Serial.list());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; portName = &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.list()[1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;this&lt;/span&gt;, portName, 115200);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;boolean&lt;/span&gt; arduinoBoot = &lt;span style="color: #cc6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; count = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;long&lt;/span&gt; sendTimer;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; draw() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(arduinoBoot == &lt;span style="color: #cc6600;"&gt;false&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(2500);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arduinoBoot&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;true&lt;/span&gt;;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #cc6600;"&gt;millis&lt;/span&gt;() - sendTimer) &amp;gt; 2000){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//DataPacket packet = build_udp_packet(NODE_ID,0,3,2,CMD_STRING,str_to_payload("Hello "+count));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendTimer=&lt;span style="color: #cc6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.process();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.tempSerialCheck(myPort);&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//this is temp until I add support for multiple serial ports, and pass a list of ports to the packetStack&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; packetEvent(DataPacket packet){&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Hashtable&amp;nbsp;&lt;span style="color: #cc6600;"&gt;send&lt;/span&gt; = &lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; packetBase64 = &lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;String&lt;/span&gt;(Base64.encodeBase64(packet.payload));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;send&lt;/span&gt;.put(&lt;span style="color: #006699;"&gt;"received"&lt;/span&gt;,packet.received);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;send&lt;/span&gt;.put(&lt;span style="color: #006699;"&gt;"packet"&lt;/span&gt;, packetBase64);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Server Reply: "&lt;/span&gt;+homeNetXmlrpcClient.execute(&lt;span style="color: #006699;"&gt;"HomeNet.addPacket"&lt;/span&gt;, &lt;span style="color: #cc6600;"&gt;send&lt;/span&gt;));&lt;br /&gt;}&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; serialEvent(&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt; port) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;stack.buildSerialPacket(port);&lt;br /&gt;}&lt;br /&gt;&lt;/commands.length;a++){&gt;&lt;/pre&gt;Much easier to use now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-4976180817212839685?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/4976180817212839685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/more-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4976180817212839685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4976180817212839685'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/more-code.html' title='More Code'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-263972598937810685</id><published>2010-11-12T13:11:00.000-08:00</published><updated>2010-11-30T16:05:14.473-08:00</updated><title type='text'>First Tests</title><content type='html'>I finally completed enough of the packet code that I finally test to see if it actually works! and Amazingly enough ti works. Packets can now be sent from a remote wireless node to a receiver and passed to the computer. It also works the other way, data from the computer can be sent to a remote node. I recorded a video but I don't have it up yet.&lt;br /&gt;&lt;br /&gt;Code after the jump&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Arduino Code&lt;br /&gt;packet.h&lt;br /&gt;&lt;pre&gt;#define&amp;nbsp;CMD_ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&lt;br /&gt;#define&amp;nbsp;CMD_VERSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&lt;br /&gt;#define&amp;nbsp;CMD_BATTERYLEVEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x03&lt;br /&gt;#define&amp;nbsp;CMD_PING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x3E&lt;br /&gt;#define&amp;nbsp;CMD_PONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xE3&lt;br /&gt;#define&amp;nbsp;CMD_ACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;#define&amp;nbsp;CMD_SETNODEID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x21&lt;br /&gt;#define&amp;nbsp;CMD_GETNODEID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x21&lt;br /&gt;#define&amp;nbsp;CMD_SETNODEID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x22&lt;br /&gt;#define&amp;nbsp;CMD_GETPLUG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x23&lt;br /&gt;#define&amp;nbsp;CMD_SETPLUG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x24&lt;br /&gt;#define&amp;nbsp;CMD_AUTOSENDSTART&amp;nbsp;&amp;nbsp;&amp;nbsp;0xC1&lt;br /&gt;#define&amp;nbsp;CMD_AUTOSENDSTOP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xC2&lt;br /&gt;#define&amp;nbsp;CMD_GETVALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xD0&lt;br /&gt;#define&amp;nbsp;CMD_SETVALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xD1&lt;br /&gt;#define&amp;nbsp;CMD_ON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xE0&lt;br /&gt;#define&amp;nbsp;CMD_OFF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xE1&lt;br /&gt;#define&amp;nbsp;CMD_LEVEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xE2&lt;br /&gt;#define&amp;nbsp;CMD_BYTE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xF0&lt;br /&gt;#define&amp;nbsp;CMD_STRING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xF1&lt;br /&gt;#define&amp;nbsp;CMD_INT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xF2&lt;br /&gt;#define&amp;nbsp;CMD_FLOAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xF3&lt;br /&gt;#define&amp;nbsp;CMD_LONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xF4&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;DVC_TMP37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&lt;br /&gt;#define&amp;nbsp;DVC_LIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x02&lt;br /&gt;#define&amp;nbsp;DVC_SHT21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x03&lt;br /&gt;#define&amp;nbsp;DVC_DOORCONTACT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x04&lt;br /&gt;#define&amp;nbsp;DVC_WINDOWCONTACT&amp;nbsp;&amp;nbsp;&amp;nbsp;0x05&lt;br /&gt;#define&amp;nbsp;DVC_MOTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x06&lt;br /&gt;#define&amp;nbsp;DVC_2LINEDISPLAY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x07&lt;br /&gt;#define&amp;nbsp;DVC_POWER30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08&lt;br /&gt;#define&amp;nbsp;DVC_POWER100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x09&lt;br /&gt;#define&amp;nbsp;DVC_SMARTOUTLET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x10&lt;br /&gt;#define&amp;nbsp;DVC_RGBLIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;#define&amp;nbsp;DVC_SOUND&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x12&lt;br /&gt;#define&amp;nbsp;DVC_SWITCH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x13&lt;br /&gt;#define&amp;nbsp;DVC_STATUSLED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x14&lt;br /&gt;#define&amp;nbsp;DVC_BUZZER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x15&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//decoded&amp;nbsp;packet&amp;nbsp;struct&lt;/span&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if 255 = ready to send // 0 = resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;settings;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//01010101 //version //type direct or broadcast //ack //ttl //priority //multi&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;type;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//1 single tcp, 2 single udp, 3 multipacket tcp&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;fromNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;fromPlug;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;toNode;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//00 is base //xffff is broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;toPlug;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ttl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;from;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;payload[48];&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;}&amp;nbsp;DataPacketDecoded;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//simple&amp;nbsp;data&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;from;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;payload[56];&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;checksum;&lt;br /&gt;}&amp;nbsp;DataPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//payload&amp;nbsp;type&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;data[56];&lt;br /&gt;}&amp;nbsp;Payload;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//not&amp;nbsp;used&amp;nbsp;yet&lt;/span&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; start;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;waiting;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;}&amp;nbsp;ACKStatus;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;type;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;status;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;}&amp;nbsp;Port;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//shortcuts&amp;nbsp;to&amp;nbsp;important&amp;nbsp;bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//keeps&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;decode&amp;nbsp;the&amp;nbsp;whole&amp;nbsp;thing&amp;nbsp;to&amp;nbsp;check&amp;nbsp;simple&amp;nbsp;parts&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_LENGTH&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;PACKET_SETTINGS&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;PACKET_FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PACKET_TO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PACKET_TTL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PACKET_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;br /&gt;#define&amp;nbsp;PACKET_COMMAND&amp;nbsp;&amp;nbsp;7&lt;br /&gt;#define&amp;nbsp;PACKET_PAYLOAD&amp;nbsp;&amp;nbsp;8&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//an&amp;nbsp;enum&amp;nbsp;might&amp;nbsp;be&amp;nbsp;better&amp;nbsp;here&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;STATUS_CLEAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;STATUS_RECEVING&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;STATUS_RECEIVED&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;STATUS_WAITING&amp;nbsp;&amp;nbsp;3&lt;br /&gt;#define&amp;nbsp;STATUS_READY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;STATUS_SENDING&amp;nbsp;&amp;nbsp;5&lt;br /&gt;#define&amp;nbsp;STATUS_SENT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;br /&gt;#define&amp;nbsp;STATUS_ACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;br /&gt;#define&amp;nbsp;STATUS_SUCCESS&amp;nbsp;&amp;nbsp;8&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;OFFSET_PACKET&amp;nbsp;10&lt;br /&gt;#define&amp;nbsp;OFFSET_HEADER&amp;nbsp;8&lt;br /&gt;#define&amp;nbsp;OFFSET_FOOTER&amp;nbsp;2&lt;br /&gt;&lt;/pre&gt;node.pde&lt;br /&gt;&lt;pre&gt;#include&amp;nbsp;&lt;util/crc16.&lt;span style="color: #CC6600;"&gt;h&lt;/span&gt;&gt; &lt;span style="color: #7E7E7E;"&gt;//checksum functions&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&lt;span style="color: #006699;"&gt;"protocol.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include&amp;nbsp;&lt;RF12.&lt;span style="color: #CC6600;"&gt;h&lt;/span&gt;&gt;&lt;br /&gt;#include&amp;nbsp;&lt;Ports.&lt;span style="color: #CC6600;"&gt;h&lt;/span&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//#include&amp;nbsp;&lt;PortsLCD.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//PortI2C&amp;nbsp;myI2C&amp;nbsp;(2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//LiquidCrystalI2C&amp;nbsp;lcd&amp;nbsp;(myI2C);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;NODE_ID&amp;nbsp;0x04&lt;br /&gt;&lt;br /&gt;Port&amp;nbsp;leds&amp;nbsp;(1);&lt;br /&gt;Port&amp;nbsp;light&amp;nbsp;(2);&lt;br /&gt;MilliTimer&amp;nbsp;sendTimer;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PLUG_1&amp;nbsp;DVC_STATUSLED&lt;br /&gt;#define&amp;nbsp;PLUG_2&amp;nbsp;DVC_2LINEDISPLAY&lt;br /&gt;#define&amp;nbsp;PLUG_3&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;PLUG_4&amp;nbsp;0&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_BUFFER&amp;nbsp;16&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//can be adujsted based on available space&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_TIMEOUT&amp;nbsp;150&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PORT_RF12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;PORT_SERIAL&amp;nbsp;&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PORT_SERIAL1&amp;nbsp;3&lt;br /&gt;#define&amp;nbsp;PORT_SERIAL2&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PORT_SERIAL3&amp;nbsp;5&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PORT_COUNT&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PORT_0&amp;nbsp;PORTTYPE_SERIAL&lt;br /&gt;#define&amp;nbsp;PORT_1&amp;nbsp;PORTTYPE_RF12&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//#define&amp;nbsp;DEBUG&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//#define&amp;nbsp;ENABLE_SERIAL&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;ENABLE_RF12&amp;nbsp;1&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//#define&amp;nbsp;ENABLE_SERIAL123&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;PACKET_UDP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PACKET_BROADCAST&amp;nbsp;3&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//types&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//ACK&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Single&amp;nbsp;TCp&amp;nbsp;//requires&amp;nbsp;2byte&amp;nbsp;packet&amp;nbsp;ID&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Single&amp;nbsp;UDP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Multi&amp;nbsp;TCP&amp;nbsp;//requires&amp;nbsp;2byte&amp;nbsp;total&amp;nbsp;ID,&amp;nbsp;2&amp;nbsp;byte&amp;nbsp;Packet&amp;nbsp;ID&amp;nbsp;+&amp;nbsp;byte&amp;nbsp;current&amp;nbsp;packet&amp;nbsp;+&amp;nbsp;byte&amp;nbsp;total&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//multi&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//packet&amp;nbsp;id&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//current&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//total&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;Port&amp;nbsp;ports[]&amp;nbsp;=&amp;nbsp;{{PORTTYPE_SERIAL,STATUS_CLEAR},&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{PORTTYPE_RF12,STATUS_CLEAR}};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//list&amp;nbsp;attached&amp;nbsp;ports&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//1&amp;nbsp;2&amp;nbsp;3&amp;nbsp;4&amp;nbsp;//rf12&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;COLLECT&amp;nbsp;0x20&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// collect mode, i.e. pass incoming without sending acks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;data[PACKET_BUFFER];&lt;br /&gt;&lt;br /&gt;uint16_t&amp;nbsp;checksum;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; uniqueId = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; i;&lt;br /&gt;DataPacket&amp;nbsp;incomingPacket;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//current incoming packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*sendingPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//probably&amp;nbsp;should&amp;nbsp;break&amp;nbsp;this&amp;nbsp;out&amp;nbsp;by&amp;nbsp;type&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; sending = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; receiving = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; packetTimer;;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*getNewPacket()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(data[i].&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; == STATUS_CLEAR){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[i].from&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("all full");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint8_t&amp;nbsp;getId()&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; uniqueId++; &lt;span style="color: #7E7E7E;"&gt;//loops when it overflows&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint16_t&amp;nbsp;compressAddress(uint16_t&amp;nbsp;node,&amp;nbsp;uint8_t&amp;nbsp;port)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; (node &lt;&lt; 4) | (port &amp; 0x0F);&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//byte&amp;nbsp;m&amp;nbsp;=&amp;nbsp;1;&lt;/span&gt;&lt;br /&gt;#ifdef&amp;nbsp;ENABLE_SERIAL&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; send_packet_serial(DataPacket *packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENDING PACKET SERIAL"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; (packet-&gt;payload[PACKET_LENGTH]-OFFSET_FOOTER); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;_crc16_update(dataChecksum,&amp;nbsp;packet-&gt;payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(packet-&gt;payload[i],&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;checksum&amp;nbsp;=&amp;nbsp;dataChecksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;highByte&lt;/span&gt;(dataChecksum),&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Serial.print(",");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;lowByte&lt;/span&gt;(dataChecksum),&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENT;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("");&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;#endif&lt;br /&gt;#ifdef&amp;nbsp;ENABLE_RF12&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; send_packet_rf12(DataPacket *packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (rf12_canSend()) { &lt;span style="color: #7E7E7E;"&gt;//check if radio is free&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENDING PACKET RF12"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; header = (packet-&gt;payload[PACKET_SETTINGS] == PACKET_TCP) ? RF12_HDR_ACK : 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.print("Node Header: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println(header,DEC);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; toNode = get_node(packet,PACKET_TO);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.print("Send to Node: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println(toNode,DEC);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (toNode &gt; 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(toNode &gt; 32){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toNode&amp;nbsp;=&amp;nbsp;1;&lt;span style="color: #7E7E7E;"&gt;//if port is too high send to basestation to retransmit&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header&amp;nbsp;|=&amp;nbsp;RF12_HDR_DST&amp;nbsp;|&amp;nbsp;toNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//rf12 does it's own check sum. no need to waste resources doing it twice&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rf12_sendStart(0,&amp;nbsp;packet-&gt;payload,&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]-OFFSET_FOOTER);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendLed(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;delay&lt;/span&gt;(100);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendLed(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;#endif&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_command(DataPacket *packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;plug&amp;nbsp;=&amp;nbsp;get_plug(packet,PACKET_TO);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(plug == 0){ &lt;span style="color: #7E7E7E;"&gt;//system function&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet-&gt;payload[PACKET_COMMAND]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_ERROR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_VERSION:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_BATTERYLEVEL:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_PING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_PONG,&amp;nbsp;get_payload(packet));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_PONG:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_ACK:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_GETNODEID:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_SETNODEID:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_GETPLUG:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_SETPLUG:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(plug == 2){ &lt;span style="color: #7E7E7E;"&gt;//system function&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(packet-&gt;payload[PACKET_COMMAND])&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;CMD_STRING:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;get_payload(packet);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcd.setCursor(0,&amp;nbsp;1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;//&amp;nbsp;print&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;seconds&amp;nbsp;since&amp;nbsp;reset:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int&amp;nbsp;a&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;a&amp;nbsp;&lt;&amp;nbsp;p-&gt;length;&amp;nbsp;a++){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lcd.print(p-&gt;data[a]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#ifdef&amp;nbsp;ENABLE_RF12&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//build&amp;nbsp;rf12&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;DataPacket*&amp;nbsp;receive_rf12(const&amp;nbsp;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt;* payload, uint8_t length){&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket*&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;memcpy(packet-&gt;payload,payload,&amp;nbsp;length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_RECEIVED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;from&amp;nbsp;=&amp;nbsp;PORT_RF12;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;DataPacket*&amp;nbsp;clonePacket(DataPacket*&amp;nbsp;packet){&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket*&amp;nbsp;packet2&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;memcpy(packet2,packet,&amp;nbsp;sizeof(packet))&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; build_incoming_packet(uint8_t byteIn)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//mark which port it is coming from&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == 0){  &lt;span style="color: #7E7E7E;"&gt;//Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn == 0) { &lt;span style="color: #7E7E7E;"&gt;//resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn == 255) { &lt;span style="color: #7E7E7E;"&gt;//aknowledge&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;span style="color: #7E7E7E;"&gt;//allow next packet to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (byteIn &gt; 128) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;flush&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(0,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packetTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_RECEVING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//checksum &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr &lt; (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//add to check sum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[incomingPacket.ptr]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;_crc16_update(checksum,&amp;nbsp;byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//get first byte of checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; { &lt;span style="color: #7E7E7E;"&gt;//get second byte and check the checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;(incomingPacket.checksum&amp;nbsp;&lt;&lt;&amp;nbsp;8)&amp;nbsp;|&amp;nbsp;(byteIn&amp;nbsp;&amp;&amp;nbsp;0xFF);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(checksum != incomingPacket.checksum) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_ERROR,&amp;nbsp;packet_to_payload(&amp;incomingPacket));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;flush&lt;/span&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(1,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//tell the node to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;=STATUS_RECEIVED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.from&amp;nbsp;=&amp;nbsp;PORT_SERIAL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;incomingPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.flush();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(255,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//tell the node the packet was successful&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//reset incomingPacket&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;=STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//determine&amp;nbsp;where&amp;nbsp;to&amp;nbsp;send&amp;nbsp;packet.&amp;nbsp;how&amp;nbsp;to&amp;nbsp;expand&amp;nbsp;when&amp;nbsp;we&amp;nbsp;have&amp;nbsp;4&amp;nbsp;serial&amp;nbsp;ports?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_stack(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//sending = false; //only send one pack per cycle&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i&lt;PACKET_BUFFER;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_packet(&amp;data[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;send&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;resend&amp;nbsp;if&amp;nbsp;ACKs&amp;nbsp;are&amp;nbsp;late&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;data&amp;nbsp;packets&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;deleted&amp;nbsp;from&amp;nbsp;the&amp;nbsp;stack&amp;nbsp;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_packet(DataPacket *packet){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_CLEAR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("CLEAR");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEIVED:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug_packet(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(get_node(packet,PACKET_TO) == NODE_ID){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_command(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEIVED"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_WAITING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"WAITING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_READY:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//check for free port&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(sending == &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket&amp;nbsp;=&amp;nbsp;packet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if reset pointer and set to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"READY"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENDING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//because of the above, only one packet will be changed to sending&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#if&amp;nbsp;defined(ENABLE_SERIAL)&amp;nbsp;&amp;&amp;&amp;nbsp;defined(ENABLE_RF12)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;from == 0){ &lt;span style="color: #7E7E7E;"&gt;//self generated send to both ports&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;from&amp;nbsp;=&amp;nbsp;PORT_RF12;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet2&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet2&amp;nbsp;=&amp;nbsp;packet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;ENABLE_RF12&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;from != PORT_RF12){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_packet_rf12(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;ENABLE_SERIAL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;from != PORT_SERIAL){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_packet_serial(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENDING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if is a ack packet &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;payload[PACKET_SETTINGS] == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_ACK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//start packets ack timer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet-&gt;status = STATUS_SUCCESS;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;span style="color: #7E7E7E;"&gt;//allow next packet to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENT"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_ACK:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if execeded timer resen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//count resends if exceds max kill packet and add error&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ACK"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SUCCESS:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//option to post status to screen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SUCCESS"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;static&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; sendLed (&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; on) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leds.mode(&lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leds.digiWrite(on);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;static&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; receiveLed (&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; on) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leds.mode2(&lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leds.digiWrite2(!on);&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// inverse, because LED is tied to VCC&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; counter;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;#if&amp;nbsp;defined(ENABLE_SERIAL)&amp;nbsp;||&amp;nbsp;defined(DEBUG)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;begin&lt;/span&gt;(115200);&lt;br /&gt;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;ENABLE_RF12&lt;br /&gt;&amp;nbsp;&amp;nbsp;rf12_initialize(NODE_ID,&amp;nbsp;RF12_915MHZ,&amp;nbsp;33);&lt;br /&gt;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"DEBUGGING MODE"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;lcd.begin(16,&amp;nbsp;2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Print&amp;nbsp;a&amp;nbsp;message&amp;nbsp;to&amp;nbsp;the&amp;nbsp;LCD.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;lcd.print("Hello,&amp;nbsp;Matthew");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;lcd.backlight();*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;counter&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;sendLed(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;receiveLed(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;delay&lt;/span&gt;(500);&lt;br /&gt;&amp;nbsp;&amp;nbsp;sendLed(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;receiveLed(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;if(counter&amp;nbsp;==&amp;nbsp;100000)&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Serial.print(availableMemory(),DEC);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;DataPacket&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_STRING,&amp;nbsp;str_to_payload("ha&amp;nbsp;ha&amp;nbsp;ha22222"));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;p-&gt;status&amp;nbsp;=&amp;nbsp;STATUS_READY;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;counter&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;counter++;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;process_stack();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//recieve timer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;ENABLE_SERIAL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//and send command to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;available&lt;/span&gt;()&gt;0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteIn&amp;nbsp;=&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;read&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;build_incoming_packet(byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;process_stack();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(receiving == &lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;() - packetTimer) &gt; PACKET_TIMEOUT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.flush();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(2,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//tell the node to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//DataPacket *p = build_udp_packet(NODE_ID, 1, 0, 0, CMD_ERROR, packet_to_payload(&amp;incomingPacket));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// p-&gt;status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;ENABLE_RF12&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (rf12_recvDone() &amp;&amp; rf12_crc == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// receiveLed(1);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RF12 Receiving"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; ((rf12_hdr &amp; RF12_HDR_ACK) &amp;&amp; !(rf12_hdr &amp; RF12_HDR_CTL) &amp;&amp; (NODE_ID &amp; COLLECT) == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; addr = rf12_hdr &amp; RF12_HDR_MASK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// if request was sent only to us, send ack back as broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rf12_sendStart(rf12_hdr&amp;nbsp;&amp;&amp;nbsp;RF12_HDR_DST&amp;nbsp;?&amp;nbsp;RF12_HDR_CTL&amp;nbsp;:&amp;nbsp;RF12_HDR_CTL&amp;nbsp;|&amp;nbsp;RF12_HDR_DST&amp;nbsp;|&amp;nbsp;addr,&amp;nbsp;0,&amp;nbsp;0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;receive_rf12((&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt;*)rf12_data,rf12_len);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//blink led&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiveLed(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;delay&lt;/span&gt;(100);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiveLed(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//delay(5);  &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (sendTimer.poll(5000)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;light.mode2(&lt;span style="color: #006699;"&gt;INPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; l = light.anaRead()/4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;0,&amp;nbsp;3,&amp;nbsp;2,&amp;nbsp;CMD_BYTE,&amp;nbsp;byte_to_payload(l));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//p-&gt;from = PORT_SERIAL;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;delay&lt;/span&gt;(5);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*FINISHED*/&lt;/span&gt;&lt;br /&gt;Payload&amp;nbsp;*get_payload(DataPacket&amp;nbsp;*packet)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;OFFSET_PACKET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; payload.length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;payload[PACKET_SETTINGS] &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;packet-&gt;payload[i+OFFSET_HEADER];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;payload[PACKET_SETTINGS] == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*packet_to_payload(DataPacket&amp;nbsp;*packet)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; (payload.length - OFFSET_FOOTER); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;packet-&gt;payload[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.data[payload.length&amp;nbsp;-&amp;nbsp;OFFSET_FOOTER]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;highByte&lt;/span&gt;(packet-&gt;checksum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.data[payload.length&amp;nbsp;-&amp;nbsp;OFFSET_FOOTER&amp;nbsp;+&amp;nbsp;1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;lowByte&lt;/span&gt;(packet-&gt;checksum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint16_t&amp;nbsp;get_node(DataPacket&amp;nbsp;*packet,&amp;nbsp;uint8_t&amp;nbsp;location)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;node;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;packet-&gt;payload[location];&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;|&amp;nbsp;(packet-&gt;payload[location+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; node;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint8_t&amp;nbsp;get_plug(DataPacket&amp;nbsp;*packet,&amp;nbsp;uint8_t&amp;nbsp;location)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; (packet-&gt;payload[location+1] &amp; 0x0F);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Payload&amp;nbsp;*str_to_payload(&lt;span style="color: #CC6600;"&gt;char&lt;/span&gt; string[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;i=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;while&lt;/span&gt;(string[i] != 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt;(string[i]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i++;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.print("sizeOf: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Serial.println(i,DEC);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*long_to_payload(&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;i=(sizeof(number)-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;while&lt;/span&gt;(i != 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;number&amp;nbsp;&amp;&amp;nbsp;0xFF;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;number&amp;nbsp;=&amp;nbsp;number&amp;nbsp;&gt;&gt;&amp;nbsp;8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i--;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*byte_to_payload(&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.data[0]&amp;nbsp;=&amp;nbsp;number&amp;nbsp;&amp;&amp;nbsp;0xFF;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*uint16_to_payload(uint16_t&amp;nbsp;number)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[0]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;highByte&lt;/span&gt;(number);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;lowByte&lt;/span&gt;(number);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*build_tcp_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPlug,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPlug,&amp;nbsp;uint8_t&amp;nbsp;command,&amp;nbsp;Payload&amp;nbsp;*payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload-&gt;length&amp;nbsp;+&amp;nbsp;OFFSET_PACKET;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(fromNode,&amp;nbsp;fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload-&gt;length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload-&gt;data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DataPacket&amp;nbsp;*&amp;nbsp;Pointer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;New&amp;nbsp;DataPacket&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*build_udp_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPlug,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPlug,&amp;nbsp;uint8_t&amp;nbsp;command,&amp;nbsp;Payload&amp;nbsp;*payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload-&gt;length&amp;nbsp;+&amp;nbsp;OFFSET_PACKET;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(fromNode,&amp;nbsp;fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload-&gt;length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload-&gt;data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*build_broadcast_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPlug,&amp;nbsp;uint8_t&amp;nbsp;ttl,&amp;nbsp;Payload&amp;nbsp;payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;turns&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;into&amp;nbsp;a&amp;nbsp;decoded&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;DataPacketDecoded&amp;nbsp;decode_packet(DataPacket&amp;nbsp;*packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;decodedPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ttl&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Set Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.length&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//settings &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.settings&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.type&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS];&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//right now these are the same things&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//From 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_FROM];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;|&amp;nbsp;(packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromPlug&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//To 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_TO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;|&amp;nbsp;(packet-&gt;payload[PACKET_TO+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toPlug&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_TO+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.id&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_ID];&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Command&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.command&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_COMMAND];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ptr&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;OFFSET_PACKET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;*payload&amp;nbsp;=&amp;nbsp;get_payload(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; payload-&gt;length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decodedPacket.payload[i]&amp;nbsp;=&amp;nbsp;payload-&gt;data[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.checksum=packet-&gt;checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; decodedPacket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; debug_packet(DataPacket *packet){&lt;br /&gt;&amp;nbsp;DataPacketDecoded&amp;nbsp;sendPacketedDecoded&amp;nbsp;=&amp;nbsp;decode_packet(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Decode Packet"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    sent: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  length: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.length,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"settings: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.settings,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    type: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.type,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromNode: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.fromNode,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromPlug: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.fromPlug,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toNode: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.toNode,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toPlug: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.toPlug,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ttl: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.ttl,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"      id: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.id,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" command: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.command,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; sendPacketedDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(sendPacketedDecoded.payload[i],&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;""&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; sendPacketedDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(sendPacketedDecoded.payload[i],&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;""&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"checksum: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.checksum,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ptr: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.ptr,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    from: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.from,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; availableMemory() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; size = 2048; &lt;span style="color: #7E7E7E;"&gt;// Use 2048 with ATmega328&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; *buf;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;while&lt;/span&gt; ((buf = (&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; *) malloc(--size)) == NULL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;free(buf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; size;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Processing code:&lt;br /&gt;&lt;pre&gt;import&amp;nbsp;processing.serial.*;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//shortcuts&amp;nbsp;to&amp;nbsp;important&amp;nbsp;bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//keeps&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;decode&amp;nbsp;the&amp;nbsp;whole&amp;nbsp;thing&amp;nbsp;to&amp;nbsp;check&amp;nbsp;simple&amp;nbsp;parts&lt;/span&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_LENGTH   = 0;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_SETTINGS = 1;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_FROM     = 2;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_TO       = 4;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_TTL      = 4;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_ID       = 6;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_COMMAND  = 7;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_PAYLOAD  = 8;&lt;br /&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; CMD_PING = 0x3E;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; CMD_PONG = 0xE3;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; CMD_STRING = 0xF1;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//an&amp;nbsp;enum&amp;nbsp;might&amp;nbsp;be&amp;nbsp;better&amp;nbsp;here&lt;/span&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_CLEAR    = 0;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_RECEVING = 1;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_RECEVIED = 2;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_WAITING  = 3;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_READY    = 4;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_SENDING  = 5;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_SENT     = 6;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_ACK      = 7;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_SUCCESS  = 8;&lt;br /&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; OFFSET_PACKET = 10;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; OFFSET_HEADER = 8;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; OFFSET_FOOTER = 2;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;class&lt;/span&gt; DataPacketDecoded {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; command, length, &lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = 0, settings, type,  fromPort, toPort, id, ttl = 0, ptr = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromNode, toNode,  checksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[] payload = &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[56];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded(){&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//simple&amp;nbsp;data&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;class&lt;/span&gt; DataPacket {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; ptr = 0, &lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = 0, checksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[] payload = &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[64];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket(){&amp;nbsp;}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;class&lt;/span&gt; Payload {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[] data = &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[56];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload()&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//What&amp;nbsp;should&amp;nbsp;master&amp;nbsp;ports&amp;nbsp;be?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  NODE_ID = 255;&lt;br /&gt;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_BUFFER  = 10;&lt;br /&gt;final&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_TIMEOUT = 150;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Should&amp;nbsp;be&amp;nbsp;an&amp;nbsp;ArrayList&amp;nbsp;so&amp;nbsp;we&amp;nbsp;can&amp;nbsp;add&amp;nbsp;and&amp;nbsp;remove&amp;nbsp;elements&lt;/span&gt;&lt;br /&gt;DataPacket[]&amp;nbsp;data&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket[PACKET_BUFFER];&lt;br /&gt;DataPacket&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket(); &lt;span style="color: #7E7E7E;"&gt;//current incoming packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; checksum;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; uniqueId = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; sending = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; receiving = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; packetTimer;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; bgcolor;			     &lt;span style="color: #7E7E7E;"&gt;// Background color&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fgcolor;			     &lt;span style="color: #7E7E7E;"&gt;// Fill color&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt; myPort;                       &lt;span style="color: #7E7E7E;"&gt;// The serial port&lt;/span&gt;&lt;br /&gt;PFont&amp;nbsp;myFont;&lt;br /&gt;&lt;br /&gt;XMLElement&amp;nbsp;xmlConfig;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//build&amp;nbsp;rf12&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; build_incoming_packet(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; byteIn)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//mark which port it is coming from&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"count: "&lt;/span&gt;+incomingPacket.ptr + &lt;span style="color: #006699;"&gt;" byte: "&lt;/span&gt; + byteIn);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == 0){  &lt;span style="color: #7E7E7E;"&gt;//Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn &lt;= 2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RESENDING LAST"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn == 255) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ACK SUCCESS"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;span style="color: #7E7E7E;"&gt;//allow next packet to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//aknowledge&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (byteIn &gt; 128) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;clear&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"BYTE to high"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packetTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_RECEVING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"length: "&lt;/span&gt; + byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//checksum &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr &lt; (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//add to check sum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[incomingPacket.ptr]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;_crc16_update(checksum,&amp;nbsp;byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//get first byte of checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; { &lt;span style="color: #7E7E7E;"&gt;//get second byte and check the checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;(incomingPacket.checksum&amp;nbsp;&lt;&lt;&amp;nbsp;8)&amp;nbsp;|&amp;nbsp;(byteIn&amp;nbsp;&amp;&amp;nbsp;0xFF);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(checksum != incomingPacket.checksum) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"processing checksum: "&lt;/span&gt; + checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    packet checksum: "&lt;/span&gt; + incomingPacket.checksum);   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Failed CRC Check"&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;clear&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"processing checksum: "&lt;/span&gt; + checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    packet checksum: "&lt;/span&gt; + incomingPacket.checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Passed CRC Check"&lt;/span&gt;);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;=STATUS_RECEVIED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;incomingPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;clear&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENT ACK"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug_incoming_packet(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// incomingPacket.payload;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//incomingPacket = DataPacket;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//reset incoming packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//determine&amp;nbsp;where&amp;nbsp;to&amp;nbsp;send&amp;nbsp;packet.&amp;nbsp;how&amp;nbsp;to&amp;nbsp;expand&amp;nbsp;when&amp;nbsp;we&amp;nbsp;have&amp;nbsp;4&amp;nbsp;serial&amp;nbsp;ports?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_stack(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//sending = false; //only send one pack per cycle&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i&lt;PACKET_BUFFER;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_packet(data[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;send&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;resend&amp;nbsp;if&amp;nbsp;ACKs&amp;nbsp;are&amp;nbsp;late&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;data&amp;nbsp;packets&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;deleted&amp;nbsp;from&amp;nbsp;the&amp;nbsp;stack&amp;nbsp;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;sendingPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_packet(DataPacket packet){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_CLEAR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println("CLEAR");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVING"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVIED:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if(get_node(packet,PACKET_TO) == NODE_ID){&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//process_command(packet);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// } else {&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//   packet.status = STATUS_READY; &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// }&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVIED"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_WAITING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"WAITING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_READY:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//check for free port&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(sending == &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if reset pointer and set to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"READY"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENDING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//because of the above, only one packet will be changed to sending&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if(get_node(packet,PACKET_FROM) &lt; 30){&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// send_packet_rf12(packet); &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//} else {&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_packet_serial(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket&amp;nbsp;=&amp;nbsp;packet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// }&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENDING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if is a ack packet &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet.payload[PACKET_SETTINGS] == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_ACK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//start packets ack timer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet.status = STATUS_SUCCESS;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENT"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_ACK:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if execeded timer resen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//count resends if exceds max kill packet and add error&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ACK"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SUCCESS:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//option to post status to screen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SUCCESS"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; findXMLid(XMLElement[] xml , &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; value, &lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; rAttribute){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; rValue = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; a = 0; a&lt;commands.length;a++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(unhex(commands[a].getAttribute(&lt;span style="color: #006699;"&gt;"id"&lt;/span&gt;)) == value){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; commands[a].getAttribute(rAttribute);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; rValue;&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;XMLElement&amp;nbsp;commands[];&lt;br /&gt;&lt;br /&gt;XMLElement&amp;nbsp;devices[];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; sendTimer;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;size(600,&amp;nbsp;400);&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Stage size&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//noStroke();      // No border on the next thing drawn&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myFont&amp;nbsp;=&amp;nbsp;createFont(&lt;span style="color: #006699;"&gt;"Consolas"&lt;/span&gt;, 14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;textFont(myFont);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[i].&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;xmlConfig&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; XMLElement(&lt;span style="color: #CC6600;"&gt;this&lt;/span&gt;, &lt;span style="color: #006699;"&gt;"config.txt"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;devices&amp;nbsp;=&amp;nbsp;xmlConfig.getChildren(&lt;span style="color: #006699;"&gt;"devices/device"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;commands&amp;nbsp;=&amp;nbsp;xmlConfig.getChildren(&lt;span style="color: #006699;"&gt;"commands/command"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Print a list of the serial ports, for debugging purposes:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println(PFont.list());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; portName = &lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.list()[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;this&lt;/span&gt;, portName, 115200);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; arduinoBoot = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; count = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; draw() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(arduinoBoot == &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;delay&lt;/span&gt;(2500);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arduinoBoot&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;process_stack();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;() - sendTimer) &gt; 2000){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//DataPacket packet = build_udp_packet(NODE_ID,0,3,2,CMD_STRING,str_to_payload("Hello "+count));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendTimer=&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(receiving == &lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;() - packetTimer) &gt; PACKET_TIMEOUT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;clear&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;(0); &lt;span style="color: #7E7E7E;"&gt;//tell the node to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"bad packet"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; serialEvent(&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt; myPort) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// read a byte from the serial port:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; inByte = myPort.&lt;span style="color: #CC6600;"&gt;read&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;build_incoming_packet(inByte);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//print(inByte);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//print(",");&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Done&lt;/span&gt;&lt;br /&gt;DataPacket&amp;nbsp;getNewPacket()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(data[i].&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; == STATUS_CLEAR){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"BUFFER FULL"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; get_node(DataPacket packet, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; location)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; node;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;packet.payload[location];&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;|&amp;nbsp;(packet.payload[location+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; node;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;get_payload(DataPacket&amp;nbsp;packet)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; Payload();&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;OFFSET_PACKET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; payload.length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet.payload[PACKET_SETTINGS] &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;packet.payload[i+OFFSET_HEADER];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet.payload[PACKET_SETTINGS] == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; payload; &lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Payload&amp;nbsp;str_to_payload(&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; string)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; Payload();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println("Payload Length: "+ string.length());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i&lt;string.length();i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(string.charAt(i)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;string.length();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_command(DataPacket packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet.payload[PACKET_COMMAND]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_PING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// DataPacket reply = build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, get_payload(packet));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// reply.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//change status to ready to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//default:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//send_packet(COMMAND_ERROR,NULL,0);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//   break;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; _crc16_update(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; crc, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; a)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;^=&amp;nbsp;a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt; (i = 0; i &lt; 8; ++i){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; ((crc &amp; 1) == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&gt;&gt;&amp;nbsp;1)&amp;nbsp;^&amp;nbsp;0xA001;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&gt;&gt;&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; crc &amp; 0xFFFF;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; getId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(uniqueId == 255){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uniqueId&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; uniqueId++; &lt;span style="color: #7E7E7E;"&gt;//what happens when this wraps?&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; compressAddress(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; node, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; port) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&lt;&lt;&amp;nbsp;4;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//make space&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;port&amp;nbsp;=&amp;nbsp;port&amp;nbsp;&amp;&amp;nbsp;0x0F;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; node | port;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;build_tcp_packet(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; command, Payload payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//*packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload.length&amp;nbsp;+&amp;nbsp;OFFSET_PACKET;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; address = compressAddress(fromNode, fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload.length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload.data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DataPacket&amp;nbsp;*&amp;nbsp;Pointer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;New&amp;nbsp;DataPacket&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;build_udp_packet(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; command, Payload payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//*packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload.length&amp;nbsp;+&amp;nbsp;OFFSET_PACKET;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; address = compressAddress(fromNode, fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload.length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload.data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;uint8_t&amp;nbsp;build_broadcast_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPort,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPort,&amp;nbsp;uint8_t&amp;nbsp;payload[48],&amp;nbsp;uint8_t&amp;nbsp;length,&amp;nbsp;uint8_t&amp;nbsp;ttl&amp;nbsp;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;byte&amp;nbsp;packetId&amp;nbsp;=&amp;nbsp;getNewPacketId();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;data[packetId].sent&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;packetId;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; send_packet_serial(DataPacket packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; dataChecksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; (packet.payload[PACKET_LENGTH]-2); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;_crc16_update(dataChecksum,&amp;nbsp;packet.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;(packet.payload[i] &amp; 0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;((packet.payload[i] &amp; 0xFF)) + &lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;((dataChecksum &gt;&gt;8)&amp;0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(dataChecksum &amp; 0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;""&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Packet Sent"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;((dataChecksum &gt;&gt; 8) &amp; 0xFF);	&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.&lt;span style="color: #CC6600;"&gt;write&lt;/span&gt;(dataChecksum &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;turns&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;into&amp;nbsp;a&amp;nbsp;decoded&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacketDecoded&amp;nbsp;decode_packet(DataPacket&amp;nbsp;packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;decodedPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacketDecoded();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Set Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.length&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//settings &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.settings&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.type&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//right now these are the same things&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//From 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_FROM+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//To 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_TO+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.id&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_ID];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Command&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.command&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_COMMAND];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.checksum&amp;nbsp;=&amp;nbsp;packet.checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ptr&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=PACKET_PAYLOAD; i &lt; packet.payload[PACKET_LENGTH]; i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decodedPacket.payload[i-PACKET_PAYLOAD]&amp;nbsp;=&amp;nbsp;packet.payload[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; decodedPacket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; debug_incoming_packet(DataPacket packet) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;background(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println("show packet info");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"Packet Info"&lt;/span&gt;,5,15);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; x = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;packetDecoded&amp;nbsp;=&amp;nbsp;decode_packet(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"  status: "&lt;/span&gt; + packetDecoded.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"  length: "&lt;/span&gt; + packetDecoded.length,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"settings: "&lt;/span&gt; + packetDecoded.settings,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"    type: "&lt;/span&gt; + packetDecoded.type,10,x+=20); &lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"fromNode: "&lt;/span&gt; + packetDecoded.fromNode,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"fromPort: "&lt;/span&gt; + packetDecoded.fromPort,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"  toNode: "&lt;/span&gt; + packetDecoded.toNode,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"  toPort: "&lt;/span&gt; + packetDecoded.toPort,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"     ttl: "&lt;/span&gt; + packetDecoded.ttl,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"      id: "&lt;/span&gt; + packetDecoded.id,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;" command: "&lt;/span&gt; + findXMLid(commands, packetDecoded.command,&lt;span style="color: #006699;"&gt;"code"&lt;/span&gt;),10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; message = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; message2 = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; packetDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(packetDecoded.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #006699;"&gt;","&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message2&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;char&lt;/span&gt;(packetDecoded.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt; + message,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt; + message2,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"checksum: "&lt;/span&gt; + packetDecoded.checksum,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;text(&lt;span style="color: #006699;"&gt;"     ptr: "&lt;/span&gt; + packetDecoded.ptr,10,x+=20);&lt;span style="color: #7E7E7E;"&gt;//*/&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-263972598937810685?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/263972598937810685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/first-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/263972598937810685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/263972598937810685'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/first-tests.html' title='First Tests'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-6125633132342782011</id><published>2010-11-09T04:32:00.000-08:00</published><updated>2010-11-12T11:11:56.126-08:00</updated><title type='text'>XML Config File</title><content type='html'>Its starting to be pain to setup on the constants in both Arduino and processing and in the future php so it's time to create a configuration file that all of these different languages can use (sort of)&lt;br /&gt;&lt;br /&gt;And here it is:&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;devices&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x01" code="DVC_TMP37"&amp;gt;Temperature Sensor TMP37&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x02" code="DVC_LIGHT"&amp;gt;Light Sensor LDR&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x03" code="DVC_SHT21"&amp;gt;Temperature and Humidy Sensor SHT21&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x04" code="DVC_DOORCONTACT"&amp;gt;Door Contact Sensor&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x05" code="DVC_WINDOWCONTACT"&amp;gt;Window Contact Sensor&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x06" code="DVC_MOTION"&amp;gt;Motion Sensor&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x07" code="DVC_2LINEDISPLAY"&amp;gt;2 Line Character Display&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x08" code="DVC_POWER30"&amp;gt;30A Current Sensor&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x09" code="DVC_POWER100"&amp;gt;100A Current Sensor&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x10" code="DVC_SMARTOUTLET"&amp;gt;Smart Outlet&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x11" code="DVC_RGBLIGHT"&amp;gt;RGN LED Light&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x12" code="DVC_sound"&amp;gt;Sound Sensor&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x13" code="DVC_SWITCH"&amp;gt;Simple Switch&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x14" code="DVC_STATUSLED"&amp;gt;Simple Status LEDS&amp;lt;/device&amp;gt;&lt;br /&gt;  &amp;lt;device id="0x15" code="DVC_BUZZER"&amp;gt;Alert Buzzer&amp;lt;/device&amp;gt;&lt;br /&gt;&amp;lt;/devices&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;commands&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- System Commands Port 0 --&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x00" code="CMD_ERROR"  payload="message" return="CMD_ACK"&amp;gt;&amp;lt;/command&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;command id="0x01" code="CMD_VERSION" payload="" return="CMD_FLOAT"&amp;gt;&lt;br /&gt;    Get current version of firmware on the node&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x03" code="CMD_BATTERYLEVEL" payload="" return=""&amp;gt;&lt;br /&gt;    Get current battery level&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x3E" code="CMD_PING" payload="varies" return="CMD_PONG"&amp;gt;&lt;br /&gt;    Send Test Pack, node should reply back pong&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xE3" code="CMD_PONG" payload="varies" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Response to a Ping Command&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x11" code="CMD_ACK" payload="packetid" return="CMD_BYTE"&amp;gt;&lt;br /&gt;    Acknowledge Packet, letting the sender of a packet know that data arriced safely&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x21" code="CMD_GETNODEID" payload="" return="CMD_BYTE"&amp;gt;&lt;br /&gt;    Get Node's current ID (node id 0 is for broadcast)&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x22" code="CMD_SETNODEID" payload="passcode" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Changes NODE ID, used for initial setup&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x23" code="CMD_GETPLUG" payload="byte port" return="CMD_BYTE"&amp;gt;&lt;br /&gt;    Get the device code for what is attached on the node&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0x24" code="CMD_SETPLUG" payload="passcode" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Changes Device ID, used for initial setup&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Plug commands Ports 1-15 --&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xC1" code="CMD_AUTOSENDSTART" payload="node to, int" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Set up the node to automatically send sensor data to a particular node &lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xC2" code="CMD_AUTOSENDSTOP" payload="node to" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Stop auto sending sensor data&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xD0" code="CMD_GETVALUE" payload="" return="Value"&amp;gt;&lt;br /&gt;    Get a value from a plug&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xD1" code="CMD_SETVALUE" payload="" return="Value"&amp;gt;&lt;br /&gt;    Send a value to a plug&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;command id="0xE0" code="CMD_ON" payload="" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Simple Turn on&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xE1" code="CMD_OFF" payload="" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Simple Turn Off&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xE2" code="CMD_LEVEL" payload="byte" return="CMD_ACK"&amp;gt;&lt;br /&gt;    Set a light to a level 0-255&lt;br /&gt;  &amp;lt;/command&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Value commands --&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xF0" code="CMD_BYTE"   payload="byte" return="CMD_ACK"&amp;gt;&amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xF1" code="CMD_STRING" payload="string" return="CMD_ACK"&amp;gt;&amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xF2" code="CMD_INT"    payload="int" return="CMD_ACK"&amp;gt;&amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xF3" code="CMD_FLOAT"  payload="float" return="CMD_ACK"&amp;gt;&amp;lt;/command&amp;gt;&lt;br /&gt;  &amp;lt;command id="0xF4" code="CMD_LONG"   payload="long" return="CMD_ACK"&amp;gt;&amp;lt;/command&amp;gt;&lt;br /&gt;&amp;lt;/commands&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- One day more stuff will be setup too  --&amp;gt;&lt;br /&gt;&amp;lt;pachube&amp;gt;&lt;br /&gt;  &amp;lt;apikey&amp;gt;&amp;lt;/apikey&amp;gt;&lt;br /&gt;  &amp;lt;feeds&amp;gt;&lt;br /&gt;    &amp;lt;feed name="Bedroom"&amp;gt;&lt;br /&gt;      &amp;lt;datastream id="0" node="" plug="" device="" /&amp;gt;&lt;br /&gt;    &amp;lt;/feed&amp;gt;&lt;br /&gt;  &amp;lt;/feeds&amp;gt;&lt;br /&gt;&amp;lt;/pachube&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;webserver&amp;gt;&lt;br /&gt;  &amp;lt;address&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;&amp;lt;/webserver&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Processing has built in tools for reading XML and this quick sketch reads the XML file a translates it in to list of #defines for the Arduino. this way as the lists of devices and commands evolve, it's very easy to translate it from one language to another.&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #CC6600;"&gt;XMLElement&lt;/span&gt; xml;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;PFont&lt;/span&gt; myFont;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;PrintWriter&lt;/span&gt; file;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; spaces(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; count){&lt;br /&gt;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; spaces = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; a = 0;a&amp;lt;count;a++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;spaces&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #006699;"&gt;" "&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; spaces;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;size&lt;/span&gt;(200, 200);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myFont&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;createFont&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Consolas"&lt;/span&gt;, 14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;textFont&lt;/span&gt;(myFont);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;xml&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;XMLElement&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;this&lt;/span&gt;, &lt;span style="color: #006699;"&gt;"config.txt"&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//in txt&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;file&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;createWriter&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"define.txt"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;XMLElement&lt;/span&gt; commands[] = xml.&lt;span style="color: #CC6600;"&gt;getChildren&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"commands/command"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i = 0; i&amp;lt;commands.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"#define "&lt;/span&gt;+ commands[i].getAttribute(&lt;span style="color: #006699;"&gt;"code"&lt;/span&gt;)+spaces(20 - commands[i].getAttribute(&lt;span style="color: #006699;"&gt;"code"&lt;/span&gt;).&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;())+commands[i].getAttribute(&lt;span style="color: #006699;"&gt;"id"&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;file.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;""&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//blank line&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;XMLElement&lt;/span&gt; devices[] = xml.&lt;span style="color: #CC6600;"&gt;getChildren&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"devices/device"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i = 0; i&amp;lt;devices.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"#define "&lt;/span&gt;+ devices[i].getAttribute(&lt;span style="color: #006699;"&gt;"code"&lt;/span&gt;)+spaces(20 - devices[i].getAttribute(&lt;span style="color: #006699;"&gt;"code"&lt;/span&gt;).&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;())+devices[i].getAttribute(&lt;span style="color: #006699;"&gt;"id"&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;file.&lt;span style="color: #CC6600;"&gt;flush&lt;/span&gt;(); &lt;span style="color: #7E7E7E;"&gt;// Write the remaining data&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;file.&lt;span style="color: #CC6600;"&gt;close&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;exit&lt;/span&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;And here is the Arduino Code the script above generated for me&lt;br /&gt;&lt;pre&gt;#define CMD_ERROR           0x00&lt;br /&gt;#define CMD_VERSION         0x01&lt;br /&gt;#define CMD_BATTERYLEVEL    0x03&lt;br /&gt;#define CMD_PING            0x3E&lt;br /&gt;#define CMD_PONG            0xE3&lt;br /&gt;#define CMD_ACK             0x11&lt;br /&gt;#define CMD_SETNODEID       0x21&lt;br /&gt;#define CMD_GETNODEID       0x21&lt;br /&gt;#define CMD_SETNODEID       0x22&lt;br /&gt;#define CMD_GETPLUG         0x23&lt;br /&gt;#define CMD_SETPLUG         0x24&lt;br /&gt;#define CMD_AUTOSENDSTART   0xC1&lt;br /&gt;#define CMD_AUTOSENDSTOP    0xC2&lt;br /&gt;#define CMD_GETVALUE        0xD0&lt;br /&gt;#define CMD_SETVALUE        0xD1&lt;br /&gt;#define CMD_ON              0xE0&lt;br /&gt;#define CMD_OFF             0xE1&lt;br /&gt;#define CMD_LEVEL           0xE2&lt;br /&gt;#define CMD_BYTE            0xF0&lt;br /&gt;#define CMD_STRING          0xF1&lt;br /&gt;#define CMD_INT             0xF2&lt;br /&gt;#define CMD_FLOAT           0xF3&lt;br /&gt;#define CMD_LONG            0xF4&lt;br /&gt;&lt;br /&gt;#define DVC_TMP37           0x01&lt;br /&gt;#define DVC_LIGHT           0x02&lt;br /&gt;#define DVC_SHT21           0x03&lt;br /&gt;#define DVC_DOORCONTACT     0x04&lt;br /&gt;#define DVC_WINDOWCONTACT   0x05&lt;br /&gt;#define DVC_MOTION          0x06&lt;br /&gt;#define DVC_2LINEDISPLAY    0x07&lt;br /&gt;#define DVC_POWER30         0x08&lt;br /&gt;#define DVC_POWER100        0x09&lt;br /&gt;#define DVC_SMARTOUTLET     0x10&lt;br /&gt;#define DVC_RGBLIGHT        0x11&lt;br /&gt;#define DVC_sound           0x12&lt;br /&gt;#define DVC_SWITCH          0x13&lt;br /&gt;#define DVC_STATUSLED       0x14&lt;br /&gt;#define DVC_BUZZER          0x15&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-6125633132342782011?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/6125633132342782011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/xml-config-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6125633132342782011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6125633132342782011'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/xml-config-file.html' title='XML Config File'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-263864827773661665</id><published>2010-11-08T09:10:00.000-08:00</published><updated>2010-11-30T16:06:00.977-08:00</updated><title type='text'>Ping Pong Packets</title><content type='html'>After another week of work on my packet code, I finally have a working example of call and response working. Processing sends a Ping packet to the Arduino and the Arduino replies back Pong along with the payload of the original packet. Next step is to expand this to connect to wireless nodes.&lt;br /&gt;&lt;br /&gt;Code after the jump&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Processing:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #CC6600;"&gt;import&lt;/span&gt; processing.serial.*;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Device&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_LM33          = 0x01;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_ST11          = 0x02;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_ST15          = 0x03;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_DOORCONTACT   = 0x04;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_FLIPSWITCH    = 0x05;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_LIGHT         = 0x06;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_MOTION        = 0x07;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_2LINECHAR     = 0x08;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_POWER30       = 0x08;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_POWER100      = 0x09;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_SMARTOUTLET   = 0x10;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; DVC_RGBLIGHT      = 0x11;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Command&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_GET_VERSION   = 0x01;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_PING          = 0x3E;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_PONG          = 0xE3;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_ACK           = 0x11;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_READ          = 0xAA;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_WRITE         = 0xBB;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_PORTTYPE      = 0xCC;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_AUTOSENDSTART = 0xC1;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_AUTOSENDSTOP  = 0xC2;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  CMD_ERROR         = 0xFF;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//shortcuts&amp;nbsp;to&amp;nbsp;important&amp;nbsp;bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//keeps&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;decode&amp;nbsp;the&amp;nbsp;whole&amp;nbsp;thing&amp;nbsp;to&amp;nbsp;check&amp;nbsp;simple&amp;nbsp;parts&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_LENGTH   = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_SETTINGS = 1;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_FROM     = 2;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_TO       = 4;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_TTL      = 4;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_ID       = 6;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_COMMAND  = 7;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_PAYLOAD  = 8;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//an&amp;nbsp;enum&amp;nbsp;might&amp;nbsp;be&amp;nbsp;better&amp;nbsp;here&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_CLEAR    = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_RECEVING = 1;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_RECEVIED = 2;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_WAITING  = 3;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_READY    = 4;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_SENDING  = 5;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_SENT     = 6;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_ACK      = 7;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; STATUS_SUCCESS  = 8;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; OFFSET_PACKET = 10;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; OFFSET_HEADER = 8;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; OFFSET_FOOTER = 2;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;class&lt;/span&gt; DataPacketDecoded {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; command, &lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;, &lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = 0, settings, type,  fromPort, toPort, id, ttl = 0, ptr = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromNode, toNode,  checksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[] payload = &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[56];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded(){&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//simple&amp;nbsp;data&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;class&lt;/span&gt; DataPacket {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; ptr = 0, &lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = 0, checksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[] payload = &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[64];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket(){&amp;nbsp;}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;class&lt;/span&gt; Payload {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[] data = &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;[56];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload()&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//What&amp;nbsp;should&amp;nbsp;master&amp;nbsp;ports&amp;nbsp;be?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;  NODE_ID = 0x02;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PORT_A = DVC_LM33;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PORT_B = DVC_LM33;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PORT_C = DVC_LM33;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PORT_D = DVC_LM33;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_BUFFER  = 10;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;final&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; PACKET_TIMEOUT = 100;&lt;br /&gt;&lt;br /&gt;DataPacket[]&amp;nbsp;data&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket[PACKET_BUFFER];&lt;br /&gt;DataPacket&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket(); &lt;span style="color: #7E7E7E;"&gt;//current incoming packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; checksum;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; uniqueId = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; sending = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; receiving = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; packetTimer;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; bgcolor;			     &lt;span style="color: #7E7E7E;"&gt;// Background color&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fgcolor;			     &lt;span style="color: #7E7E7E;"&gt;// Fill color&lt;/span&gt;&lt;br /&gt;Serial&amp;nbsp;myPort;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// The serial port&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;PFont&lt;/span&gt; myFont;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//build&amp;nbsp;rf12&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; build_incoming_packet(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; byteIn)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//mark which port it is coming from&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"count: "&lt;/span&gt;+incomingPacket.ptr + &lt;span style="color: #006699;"&gt;" byte: "&lt;/span&gt; + byteIn);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == 0){  &lt;span style="color: #7E7E7E;"&gt;//Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn &lt;= 1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RESENDING LAST"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn == 255) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ACK SUCCESS"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;span style="color: #7E7E7E;"&gt;//allow next packet to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//aknowledge&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (byteIn &gt; 128) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packetTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_RECEVING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"length: "&lt;/span&gt; + byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//checksum &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr &lt; (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//add to check sum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[incomingPacket.ptr]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;_crc16_update(checksum,&amp;nbsp;byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//get first byte of checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; { &lt;span style="color: #7E7E7E;"&gt;//get second byte and check the checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;(incomingPacket.checksum&amp;nbsp;&lt;&lt;&amp;nbsp;8)&amp;nbsp;|&amp;nbsp;(byteIn&amp;nbsp;&amp;&amp;nbsp;0xFF);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(checksum != incomingPacket.checksum) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"processing checksum: "&lt;/span&gt; + checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    packet checksum: "&lt;/span&gt; + incomingPacket.checksum);   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Failed CRC Check"&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"processing checksum: "&lt;/span&gt; + checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    packet checksum: "&lt;/span&gt; + incomingPacket.checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Passed CRC Check"&lt;/span&gt;);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;=STATUS_RECEVIED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;incomingPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENT ACK"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug_incoming_packet(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// incomingPacket.payload;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//incomingPacket = DataPacket;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//reset incoming packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//determine&amp;nbsp;where&amp;nbsp;to&amp;nbsp;send&amp;nbsp;packet.&amp;nbsp;how&amp;nbsp;to&amp;nbsp;expand&amp;nbsp;when&amp;nbsp;we&amp;nbsp;have&amp;nbsp;4&amp;nbsp;serial&amp;nbsp;ports?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_stack(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//sending = false; //only send one pack per cycle&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i&lt;PACKET_BUFFER;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_packet(data[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;send&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;resend&amp;nbsp;if&amp;nbsp;ACKs&amp;nbsp;are&amp;nbsp;late&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;data&amp;nbsp;packets&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;deleted&amp;nbsp;from&amp;nbsp;the&amp;nbsp;stack&amp;nbsp;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;sendingPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_packet(DataPacket packet){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_CLEAR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println("CLEAR");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVING"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVIED:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_command(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVIED"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_WAITING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"WAITING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_READY:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//check for free port&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(sending == &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if reset pointer and set to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"READY"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENDING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//because of the above, only one packet will be changed to sending&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if(get_node(packet,PACKET_FROM) &lt; 30){&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// send_packet_rf12(packet); &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//} else {&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_packet_serial(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket&amp;nbsp;=&amp;nbsp;packet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// }&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENDING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if is a ack packet &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet.payload[PACKET_SETTINGS] == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_ACK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//start packets ack timer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet.status = STATUS_SUCCESS;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENT"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_ACK:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if execeded timer resen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//count resends if exceds max kill packet and add error&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ACK"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SUCCESS:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//option to post status to screen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SUCCESS"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; sendTimer;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;size&lt;/span&gt;(600, 400);  &lt;span style="color: #7E7E7E;"&gt;// Stage size&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//noStroke();      // No border on the next thing drawn&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myFont&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;createFont&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Consolas"&lt;/span&gt;, 14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;textFont&lt;/span&gt;(myFont);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();    &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Print a list of the serial ports, for debugging purposes:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println(PFont.list());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;sendTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; portName = Serial.&lt;span style="color: #CC6600;"&gt;list&lt;/span&gt;()[1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; Serial(&lt;span style="color: #CC6600;"&gt;this&lt;/span&gt;, portName, 115200);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;draw&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;process_stack();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//process_stack();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//process_stack();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// process_stack();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// process_stack();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"loop"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//delay(1000);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//text("Hello",10,10);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//text("Z", 10, 220);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Draw the shape&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;() - sendTimer) &gt; 2500){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;build_udp_packet(0,0,1,0,CMD_PING,str_to_payload(&lt;span style="color: #006699;"&gt;"Hello"&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendTimer=&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//send_packet_serial(packet);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(receiving == &lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;() - packetTimer) &gt; PACKET_TIMEOUT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(0);&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//tell the node to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"bad packet"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; serialEvent(Serial myPort) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// read a byte from the serial port:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; inByte = myPort.read();&lt;br /&gt;&amp;nbsp;&amp;nbsp;build_incoming_packet(inByte);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//print(inByte);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//print(",");&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Done&lt;/span&gt;&lt;br /&gt;DataPacket&amp;nbsp;getNewPacket()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(data[i].&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; == STATUS_CLEAR){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"BUFFER FULL"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; get_node(DataPacket packet, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; location)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; node;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;packet.payload[location];&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;|&amp;nbsp;(packet.payload[location+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; node;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;get_payload(DataPacket&amp;nbsp;packet)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; Payload();&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt; = packet.payload[PACKET_LENGTH] - OFFSET_PACKET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet.payload[PACKET_SETTINGS] &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;packet.payload[i+OFFSET_HEADER];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet.payload[PACKET_SETTINGS] == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; payload; &lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Payload&amp;nbsp;str_to_payload(&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; string)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; Payload();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println("Payload Length: "+ string.length());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i&lt;string.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;();i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(string.&lt;span style="color: #CC6600;"&gt;charAt&lt;/span&gt;(i)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt; = string.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_command(DataPacket packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet.payload[PACKET_COMMAND]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_PING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;reply&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_PONG,&amp;nbsp;get_payload(packet));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reply.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//change status to ready to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//default:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//send_packet(COMMAND_ERROR,NULL,0);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//   break;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; _crc16_update(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; crc, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; a)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;^=&amp;nbsp;a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt; (i = 0; i &lt; 8; ++i){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; ((crc &amp; 1) == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&gt;&gt;&amp;nbsp;1)&amp;nbsp;^&amp;nbsp;0xA001;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&gt;&gt;&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; crc &amp; 0xFFFF;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; getId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(uniqueId == 255){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uniqueId&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; uniqueId++; &lt;span style="color: #7E7E7E;"&gt;//what happens when this wraps?&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; compressAddress(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; node, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; port) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&lt;&lt;&amp;nbsp;4;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//make space&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;port&amp;nbsp;=&amp;nbsp;port&amp;nbsp;&amp;&amp;nbsp;0x0F;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; node | port;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;build_tcp_packet(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; command, Payload payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//*packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt; + OFFSET_PACKET; &lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; address = compressAddress(fromNode, fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload.data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DataPacket&amp;nbsp;*&amp;nbsp;Pointer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;New&amp;nbsp;DataPacket&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;build_udp_packet(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; fromPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toNode, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; toPlug, &lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; command, Payload payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//*packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt; + OFFSET_PACKET; &lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; address = compressAddress(fromNode, fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload.data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;uint8_t&amp;nbsp;build_broadcast_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPort,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPort,&amp;nbsp;uint8_t&amp;nbsp;payload[48],&amp;nbsp;uint8_t&amp;nbsp;length,&amp;nbsp;uint8_t&amp;nbsp;ttl&amp;nbsp;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;byte&amp;nbsp;packetId&amp;nbsp;=&amp;nbsp;getNewPacketId();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;data[packetId].sent&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;packetId;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; send_packet_serial(DataPacket packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; dataChecksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; (packet.payload[PACKET_LENGTH]-2); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;_crc16_update(dataChecksum,&amp;nbsp;packet.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(packet.payload[i]&amp;nbsp;&amp;&amp;nbsp;0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;((packet.payload[i] &amp; 0xFF)) + &lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;((dataChecksum &gt;&gt;8)&amp;0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(dataChecksum &amp; 0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;""&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Packet Sent"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.write((dataChecksum&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF);	&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.write(dataChecksum&amp;nbsp;&amp;&amp;nbsp;0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;turns&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;into&amp;nbsp;a&amp;nbsp;decoded&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacketDecoded&amp;nbsp;decode_packet(DataPacket&amp;nbsp;packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;decodedPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;new&lt;/span&gt; DataPacketDecoded();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Set Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt; = packet.payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = packet.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//settings &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.settings&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.type&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//right now these are the same things&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//From 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_FROM+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//To 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_TO+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.id&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_ID];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Command&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.command&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_COMMAND];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.checksum&amp;nbsp;=&amp;nbsp;packet.checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ptr&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=PACKET_PAYLOAD; i &lt; packet.payload[PACKET_LENGTH]; i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decodedPacket.payload[i-PACKET_PAYLOAD]&amp;nbsp;=&amp;nbsp;packet.payload[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; decodedPacket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; debug_incoming_packet(DataPacket packet) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;background&lt;/span&gt;(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//println("show packet info");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Packet Info"&lt;/span&gt;,5,15);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; x = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;packetDecoded&amp;nbsp;=&amp;nbsp;decode_packet(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  status: "&lt;/span&gt; + packetDecoded.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  length: "&lt;/span&gt; + packetDecoded.&lt;span style="color: #CC6600;"&gt;length&lt;/span&gt;,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"settings: "&lt;/span&gt; + packetDecoded.settings,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    type: "&lt;/span&gt; + packetDecoded.type,10,x+=20); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromNode: "&lt;/span&gt; + packetDecoded.fromNode,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromPort: "&lt;/span&gt; + packetDecoded.fromPort,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toNode: "&lt;/span&gt; + packetDecoded.toNode,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toPort: "&lt;/span&gt; + packetDecoded.toPort,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ttl: "&lt;/span&gt; + packetDecoded.ttl,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"      id: "&lt;/span&gt; + packetDecoded.id,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" command: "&lt;/span&gt; + packetDecoded.command,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; message = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;String&lt;/span&gt; message2 = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; packetDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt;(packetDecoded.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #006699;"&gt;","&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message2&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;char&lt;/span&gt;(packetDecoded.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt; + message,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt; + message2,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"checksum: "&lt;/span&gt; + packetDecoded.checksum,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ptr: "&lt;/span&gt; + packetDecoded.ptr,10,x+=20);&lt;span style="color: #7E7E7E;"&gt;//*/&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Arduino&lt;br /&gt;&lt;br /&gt;Protocol.h&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #7E7E7E;"&gt;//Device&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;DVC_LM33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&lt;br /&gt;#define&amp;nbsp;DVC_ST11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x02&lt;br /&gt;#define&amp;nbsp;DVC_ST15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x03&lt;br /&gt;#define&amp;nbsp;DVC_DOORCONTACT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x04&lt;br /&gt;#define&amp;nbsp;DVC_FLIPSWITCH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x05&lt;br /&gt;#define&amp;nbsp;DVC_LIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x06&lt;br /&gt;#define&amp;nbsp;DVC_MOTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x07&lt;br /&gt;#define&amp;nbsp;DVC_2LINECHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08&lt;br /&gt;#define&amp;nbsp;DVC_POWER30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08&lt;br /&gt;#define&amp;nbsp;DVC_POWER100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x09&lt;br /&gt;#define&amp;nbsp;DVC_SMARTOUTLET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x10&lt;br /&gt;#define&amp;nbsp;DVC_RGBLIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Command&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_GET_VERSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&lt;br /&gt;#define&amp;nbsp;CMD_PING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x3E&lt;br /&gt;#define&amp;nbsp;CMD_PONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xE3&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_ACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_READ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xAA&lt;br /&gt;#define&amp;nbsp;CMD_WRITE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xBB&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_PORTTYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xCC&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_AUTOSENDSTART&amp;nbsp;&amp;nbsp;0xC1&lt;br /&gt;#define&amp;nbsp;CMD_AUTOSENDSTOP&amp;nbsp;&amp;nbsp;&amp;nbsp;0xC2&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x02&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xFF&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//@todo&amp;nbsp;commands&amp;nbsp;for&amp;nbsp;different&amp;nbsp;data&amp;nbsp;types?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//decoded&amp;nbsp;packet&amp;nbsp;struct&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if 255 = ready to send // 0 = resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;settings;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//01010101 //version //type direct or broadcast //ack //ttl //priority //multi&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;type;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//1 single tcp, 2 single udp, 3 multipacket tcp&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;fromNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;fromPlug;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;toNode;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//00 is base //xffff is broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;toPlug;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ttl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;payload[48];&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;}&amp;nbsp;DataPacketDecoded;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//simple&amp;nbsp;data&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;port;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;payload[56];&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;checksum;&lt;br /&gt;}&amp;nbsp;DataPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//payload&amp;nbsp;type&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;data[56];&lt;br /&gt;}&amp;nbsp;Payload;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; start;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;waiting;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;}&amp;nbsp;ACKStatus;&lt;br /&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;type;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;}&amp;nbsp;Port;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//shortcuts&amp;nbsp;to&amp;nbsp;important&amp;nbsp;bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//keeps&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;decode&amp;nbsp;the&amp;nbsp;whole&amp;nbsp;thing&amp;nbsp;to&amp;nbsp;check&amp;nbsp;simple&amp;nbsp;parts&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_LENGTH&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;PACKET_SETTINGS&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;PACKET_FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PACKET_TO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PACKET_TTL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PACKET_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;br /&gt;#define&amp;nbsp;PACKET_COMMAND&amp;nbsp;&amp;nbsp;7&lt;br /&gt;#define&amp;nbsp;PACKET_PAYLOAD&amp;nbsp;&amp;nbsp;8&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//an&amp;nbsp;enum&amp;nbsp;might&amp;nbsp;be&amp;nbsp;better&amp;nbsp;here&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;STATUS_CLEAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;STATUS_RECEVING&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;STATUS_RECEVIED&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;STATUS_WAITING&amp;nbsp;&amp;nbsp;3&lt;br /&gt;#define&amp;nbsp;STATUS_READY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;STATUS_SENDING&amp;nbsp;&amp;nbsp;5&lt;br /&gt;#define&amp;nbsp;STATUS_SENT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;br /&gt;#define&amp;nbsp;STATUS_ACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;br /&gt;#define&amp;nbsp;STATUS_SUCCESS&amp;nbsp;&amp;nbsp;8&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;OFFSET_PACKET&amp;nbsp;10&lt;br /&gt;#define&amp;nbsp;OFFSET_HEADER&amp;nbsp;8&lt;br /&gt;#define&amp;nbsp;OFFSET_FOOTER&amp;nbsp;2&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Basenode.pde&lt;br /&gt;&lt;pre&gt;#include&amp;nbsp;&lt;util/crc16.&lt;span style="color: #CC6600;"&gt;h&lt;/span&gt;&gt; &lt;span style="color: #7E7E7E;"&gt;//checksum functions&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&lt;span style="color: #006699;"&gt;"protocol.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;NODE_ID&amp;nbsp;0x02&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PLUG_A&amp;nbsp;DVC_LM33&lt;br /&gt;#define&amp;nbsp;PLUG_B&amp;nbsp;DVC_LM33&lt;br /&gt;#define&amp;nbsp;PLUG_C&amp;nbsp;DVC_LM33&lt;br /&gt;#define&amp;nbsp;PLUG_D&amp;nbsp;DVC_LM33&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_BUFFER&amp;nbsp;10&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//can be adujsted based on availbe space&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//#define&amp;nbsp;DEBUG&amp;nbsp;1;&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_TIMEOUT&amp;nbsp;100&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PORTTYPE_SERIAL&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;PORTTYPE_RF12&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PORT_COUNT&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PORT_0&amp;nbsp;PORTTYPE_SERIAL&lt;br /&gt;#define&amp;nbsp;PORT_1&amp;nbsp;PORTTYPE_RF12&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//types&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//ACK&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Single&amp;nbsp;TCp&amp;nbsp;//requires&amp;nbsp;2byte&amp;nbsp;packet&amp;nbsp;ID&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Single&amp;nbsp;UDP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//Multi&amp;nbsp;TCP&amp;nbsp;//requires&amp;nbsp;2byte&amp;nbsp;total&amp;nbsp;ID,&amp;nbsp;2&amp;nbsp;byte&amp;nbsp;Packet&amp;nbsp;ID&amp;nbsp;+&amp;nbsp;byte&amp;nbsp;current&amp;nbsp;packet&amp;nbsp;+&amp;nbsp;byte&amp;nbsp;total&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//multi&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//packet&amp;nbsp;id&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//current&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//total&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Port&amp;nbsp;ports[]&amp;nbsp;=&amp;nbsp;{{PORTTYPE_SERIAL,STATUS_CLEAR},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{PORTTYPE_RF12,STATUS_CLEAR}};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//list&amp;nbsp;attached&amp;nbsp;ports&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//1&amp;nbsp;2&amp;nbsp;3&amp;nbsp;4&amp;nbsp;//rf12&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;data[PACKET_BUFFER];&lt;br /&gt;&lt;br /&gt;uint16_t&amp;nbsp;checksum;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; uniqueId = 0;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt; i;&lt;br /&gt;DataPacket&amp;nbsp;incomingPacket;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//current incoming packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//incomingPacket.ptr&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*sendingPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; sending = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;boolean&lt;/span&gt; receiving = &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; packetTimer;;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*getNewPacket()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(data[i].&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; == STATUS_CLEAR){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("all full");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint8_t&amp;nbsp;getId()&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; uniqueId++; &lt;span style="color: #7E7E7E;"&gt;//loops when it overflows&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint16_t&amp;nbsp;compressAddress(uint16_t&amp;nbsp;node,&amp;nbsp;uint8_t&amp;nbsp;port)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; (node &lt;&lt; 4) | (port &amp; 0x0F);&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//byte&amp;nbsp;m&amp;nbsp;=&amp;nbsp;1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; send_packet_serial(DataPacket *packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//cause a problem&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// m++;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; (packet-&gt;payload[PACKET_LENGTH]-OFFSET_FOOTER); i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;_crc16_update(dataChecksum,&amp;nbsp;packet-&gt;payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if((m == 3) &amp;&amp; (i == 0)){&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//  Serial.print(packet-&gt;payload[0]-5,BYTE);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// } else {&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(packet-&gt;payload[i],&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// }&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.print(",");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;checksum&amp;nbsp;=&amp;nbsp;dataChecksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;highByte&lt;/span&gt;(dataChecksum),&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Serial.print(",");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #CC6600;"&gt;lowByte&lt;/span&gt;(dataChecksum),&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENT;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("");&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; send_packet_rf12(DataPacket *packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;/** //check address only 0-30 allowed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;@todo&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_command(DataPacket *packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet-&gt;payload[PACKET_COMMAND]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; CMD_PING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*reply&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_PONG,&amp;nbsp;get_payload(packet));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reply-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//change status to ready to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//default:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//send_packet(COMMAND_ERROR,NULL,0);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//   break;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//build&amp;nbsp;rf12&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; build_incoming_packet(uint8_t byteIn)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//mark which port it is coming from&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == 0){  &lt;span style="color: #7E7E7E;"&gt;//Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(byteIn == 255) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;span style="color: #7E7E7E;"&gt;//allow next packet to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//aknowledge&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (byteIn &gt; 128) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.flush();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(0,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packetTimer&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_RECEVING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//checksum &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr &lt; (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//add to check sum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[incomingPacket.ptr]&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;_crc16_update(checksum,&amp;nbsp;byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == (incomingPacket.payload[PACKET_LENGTH] - OFFSET_FOOTER)){ &lt;span style="color: #7E7E7E;"&gt;//get first byte of checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; { &lt;span style="color: #7E7E7E;"&gt;//get second byte and check the checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;(incomingPacket.checksum&amp;nbsp;&lt;&lt;&amp;nbsp;8)&amp;nbsp;|&amp;nbsp;(byteIn&amp;nbsp;&amp;&amp;nbsp;0xFF);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(checksum != incomingPacket.checksum) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println(checksum, DEC);  &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println(incomingPacket.checksum, DEC);   &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_ERROR,&amp;nbsp;packet_to_payload(&amp;incomingPacket));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;flush&lt;/span&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(1,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//tell the node to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;=STATUS_RECEVIED;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;incomingPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.flush();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(255,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//tell the node the packet was successful&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//reset incomingPacket&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;=STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//determine&amp;nbsp;where&amp;nbsp;to&amp;nbsp;send&amp;nbsp;packet.&amp;nbsp;how&amp;nbsp;to&amp;nbsp;expand&amp;nbsp;when&amp;nbsp;we&amp;nbsp;have&amp;nbsp;4&amp;nbsp;serial&amp;nbsp;ports?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_stack(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//sending = false; //only send one pack per cycle&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i&lt;PACKET_BUFFER;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_packet(&amp;data[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;send&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;packets&amp;nbsp;to&amp;nbsp;resend&amp;nbsp;if&amp;nbsp;ACKs&amp;nbsp;are&amp;nbsp;late&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;//check&amp;nbsp;for&amp;nbsp;data&amp;nbsp;packets&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;deleted&amp;nbsp;from&amp;nbsp;the&amp;nbsp;stack&amp;nbsp;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; process_packet(DataPacket *packet){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;switch&lt;/span&gt; (packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_CLEAR:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"CLEAR"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_RECEVIED:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process_command(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"RECEVIED"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_WAITING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"WAITING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_READY:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//check for free port&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(sending == &lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENDING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendingPacket&amp;nbsp;=&amp;nbsp;packet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if reset pointer and set to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"READY"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENDING:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//because of the above, only one packet will be changed to sending&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if(get_node(packet,PACKET_FROM) &lt; 30){&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// send_packet_rf12(packet); &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//} else {&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_packet_serial(packet);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// }&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SENT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENDING"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SENT:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if is a ack packet &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;payload[PACKET_SETTINGS] == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_ACK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//start packets ack timer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet-&gt;status = STATUS_SUCCESS;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sending&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;; &lt;span style="color: #7E7E7E;"&gt;//allow next packet to send&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_SUCCESS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SENT"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_ACK:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//if execeded timer resen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//count resends if exceds max kill packet and add error&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ACK"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;case&lt;/span&gt; STATUS_SUCCESS:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//option to post status to screen&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_CLEAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef&amp;nbsp;DEBUG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"SUCCESS"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;break&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;unsigned&lt;/span&gt; counter = 0;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;begin&lt;/span&gt;(115200);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("Ping:");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.print("nodeID: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Serial.println(NODE_ID,DEC);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// int sendPacketId =  build_udp_packet(NODE_ID, 1, 0, 0, CMD_PING, (byte*)"TEST TEST TEST", 1);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// int sendPacketId2 = build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, (byte*)"HA HA HA", 8);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//send_packet_serial(sendPacketId);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.println("");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;/**/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//DataPacket *p = build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, str_to_payload("TEEEST"));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// send_packet_serial(p);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// debug_packet(p);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//byte message[1] = {uniqueId};&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//message[15] = uniqueId;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//int sendPacketId =  build_udp_packet(NODE_ID, 1, 0, 0, CMD_PING, message, 1);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// int sendPacketId2 = build_udp_packet(NODE_ID, 1, 0, 0, CMD_PONG, (byte*)"HA HA HA", 8);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(counter &gt; 50000) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*p&amp;nbsp;=&amp;nbsp;build_udp_packet(NODE_ID,&amp;nbsp;1,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;CMD_VALUE,&amp;nbsp;str_to_payload(&lt;span style="color: #006699;"&gt;"ha ha ha22222"&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_READY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;counter++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;process_stack();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//recieve timer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//and send command to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;int&lt;/span&gt; byteIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt; (&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;available&lt;/span&gt;()&gt;0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteIn&amp;nbsp;=&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;read&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;build_incoming_packet(byteIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;process_stack();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(receiving == &lt;span style="color: #CC6600;"&gt;true&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;((&lt;span style="color: #CC6600;"&gt;millis&lt;/span&gt;() - packetTimer) &gt; PACKET_TIMEOUT) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.flush();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(2,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;); &lt;span style="color: #7E7E7E;"&gt;//tell the node to resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//DataPacket *p = build_udp_packet(NODE_ID, 1, 0, 0, CMD_ERROR, packet_to_payload(&amp;incomingPacket));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// p-&gt;status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;receiving&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//delay(5);     &lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*FINISHED*/&lt;/span&gt;&lt;br /&gt;Payload&amp;nbsp;*get_payload(DataPacket&amp;nbsp;*packet)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;OFFSET_PACKET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; payload.length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;payload[PACKET_SETTINGS] &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;packet-&gt;payload[i+OFFSET_HEADER];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(packet-&gt;payload[PACKET_SETTINGS] == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*packet_to_payload(DataPacket&amp;nbsp;*packet)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; (payload.length - OFFSET_FOOTER); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;packet-&gt;payload[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.data[payload.length&amp;nbsp;-&amp;nbsp;OFFSET_FOOTER]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;highByte&lt;/span&gt;(packet-&gt;checksum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.data[payload.length&amp;nbsp;-&amp;nbsp;OFFSET_FOOTER&amp;nbsp;+&amp;nbsp;1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;lowByte&lt;/span&gt;(packet-&gt;checksum);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;uint16_t&amp;nbsp;get_node(DataPacket&amp;nbsp;*packet,&amp;nbsp;uint8_t&amp;nbsp;location)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;node;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;packet-&gt;payload[location];&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;|&amp;nbsp;(packet-&gt;payload[location+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; node;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Payload&amp;nbsp;*str_to_payload(&lt;span style="color: #CC6600;"&gt;char&lt;/span&gt; string[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;i=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;while&lt;/span&gt;(string[i] != 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;byte&lt;/span&gt;(string[i]); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i++;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Serial.print("sizeOf: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;// Serial.println(i,DEC);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*long_to_payload(&lt;span style="color: #CC6600;"&gt;long&lt;/span&gt; number)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;i=(sizeof(number)-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;while&lt;/span&gt;(i != 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[i]&amp;nbsp;=&amp;nbsp;number&amp;nbsp;&amp;&amp;nbsp;0xFF;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;number&amp;nbsp;=&amp;nbsp;number&amp;nbsp;&gt;&gt;&amp;nbsp;8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i--;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Payload&amp;nbsp;*uint16_to_payload(uint16_t&amp;nbsp;number)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;payload;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;payload.length&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[0]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;highByte&lt;/span&gt;(number);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;payload.data[1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #CC6600;"&gt;lowByte&lt;/span&gt;(number);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; &amp;payload; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*build_tcp_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPlug,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPlug,&amp;nbsp;uint8_t&amp;nbsp;command,&amp;nbsp;Payload&amp;nbsp;*payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//*packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload-&gt;length&amp;nbsp;+&amp;nbsp;OFFSET_PACKET;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(fromNode,&amp;nbsp;fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload-&gt;length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload-&gt;data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DataPacket&amp;nbsp;*&amp;nbsp;Pointer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;New&amp;nbsp;DataPacket&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*build_udp_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPlug,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPlug,&amp;nbsp;uint8_t&amp;nbsp;command,&amp;nbsp;Payload&amp;nbsp;*payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//*packet.status = STATUS_READY;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;payload-&gt;length&amp;nbsp;+&amp;nbsp;OFFSET_PACKET;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(fromNode,&amp;nbsp;fromPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPlug);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&gt;&gt;&amp;nbsp;8)&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0;i &lt; payload-&gt;length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload-&gt;data[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;*build_broadcast_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPlug,&amp;nbsp;uint8_t&amp;nbsp;ttl,&amp;nbsp;Payload&amp;nbsp;payload)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;*packet&amp;nbsp;=&amp;nbsp;getNewPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = STATUS_WAITING;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*&amp;nbsp;turns&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;into&amp;nbsp;a&amp;nbsp;decoded&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7E7E7E;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;DataPacketDecoded&amp;nbsp;decode_packet(DataPacket&amp;nbsp;*packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;decodedPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ttl&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Set Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.length&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt; = packet-&gt;&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//settings &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.settings&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.type&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_SETTINGS];&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//right now these are the same things&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//From 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_FROM];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;|&amp;nbsp;(packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromPlug&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_FROM+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//To 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_TO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;&lt;&lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;|&amp;nbsp;(packet-&gt;payload[PACKET_TO+1]&amp;nbsp;&gt;&gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toPlug&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_TO+1]&amp;nbsp;&amp;0xF;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//packet id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.id&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_ID];&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//Command&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.command&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_COMMAND];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ptr&amp;nbsp;=&amp;nbsp;packet-&gt;payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;OFFSET_PACKET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Payload&amp;nbsp;*payload&amp;nbsp;=&amp;nbsp;get_payload(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; payload-&gt;length; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type &lt; 3) { &lt;span style="color: #7E7E7E;"&gt;//single packet TCP or UDP &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decodedPacket.payload[i]&amp;nbsp;=&amp;nbsp;payload-&gt;data[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #CC6600;"&gt;else&lt;/span&gt; &lt;span style="color: #CC6600;"&gt;if&lt;/span&gt;(decodedPacket.type == 3) {  &lt;span style="color: #7E7E7E;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7E7E7E;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.checksum=packet-&gt;checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;return&lt;/span&gt; decodedPacket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #CC6600;"&gt;void&lt;/span&gt; debug_packet(DataPacket *packet){&lt;br /&gt;&amp;nbsp;DataPacketDecoded&amp;nbsp;sendPacketedDecoded&amp;nbsp;=&amp;nbsp;decode_packet(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    sent: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.&lt;span style="color: #CC6600;"&gt;status&lt;/span&gt;,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  length: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.length,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"settings: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.settings,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    type: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.type,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromNode: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.fromNode,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromPlug: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.fromPlug,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toNode: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.toNode,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toPlug: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.toPlug,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ttl: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.ttl,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"      id: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.id,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" command: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.command,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; sendPacketedDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(sendPacketedDecoded.payload[i],&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;for&lt;/span&gt;(i=0; i &lt; sendPacketedDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(sendPacketedDecoded.payload[i],&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;","&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;""&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"checksum: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.checksum,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ptr: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #CC6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #CC6600;"&gt;println&lt;/span&gt;(sendPacketedDecoded.ptr,&lt;span style="color: #006699;"&gt;DEC&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-263864827773661665?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/263864827773661665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/ping-pong-packets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/263864827773661665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/263864827773661665'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/ping-pong-packets.html' title='Ping Pong Packets'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-1296194022431832036</id><published>2010-11-03T00:08:00.000-07:00</published><updated>2010-11-03T00:20:23.616-07:00</updated><title type='text'>Goals and Issues</title><content type='html'>Below is current look at some of goals and issues I'm currently dealing with-&lt;br /&gt;&lt;br /&gt;So far my project has three main components: &lt;br /&gt;&lt;br /&gt;Sensor Network &amp;lt;-&amp;gt; Base Station&amp;nbsp; &amp;lt;-&amp;gt; Web Interface&lt;br /&gt;&lt;br /&gt;They are interconnected and pass data between each other.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Sensor Network &lt;/h2&gt;&lt;br /&gt;The sensor network is gathering the sensor data is currently based on Jeenodes which are Arduino based nodes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Status&lt;/b&gt;: Hardware has been solder together, sensors have been purchased and the code for the protocol has been written. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Goals&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create robust adaptable nodes that can easily be reconfigured&lt;/li&gt;&lt;li&gt;Create Wired and Wireless Links&lt;/li&gt;&lt;li&gt;Create a Mesh Network&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&amp;nbsp;Current Issues &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How to design so an average user can configure a node? Pre programed ROM? Dip switches? Web interface?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Solution: Processing sketch that directly communicates with node to set address and sensor configuration to the Arduino ROM&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Current Wireless Chip doesn't do mesh networking: cost prohibitive &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Base Station&lt;/h2&gt;&lt;br /&gt;A Server program running on a PC reads packets of data from the sensor network and passes them on to a web interface. Currently using a Processing.org Java Program&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Status&lt;/b&gt;: Protocol code has been ported to java. Actual interface still needs to be built. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Goals&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Be user configurable&lt;/li&gt;&lt;li&gt;Easy to deploy/setup&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Current Issues&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How to Connect to Web server?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;XML-RPC seems like the simplest solution right now and offers a lot of flexibility.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Using EEML like pachube might work too but would require a lot more code.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;How to save settings? flat file, SQL database, remotel? &lt;/li&gt;&lt;ul&gt;&lt;li&gt;I haven't decided how to solve this yet. Some settings must be saved locally, ie web server address, Pachube api key. Using an XML file is the best soultion for this.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Other settings like node and sensors names would be better stored in a better database if it is to scale to thousands of sensors. Can it call a remote server to get this info or should it be local?&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;How to store data if Internet Connection goes down? &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Store it memory is the easiest, SQL would be better&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Web Interface&lt;/h2&gt;&lt;br /&gt;&lt;b&gt;Status&lt;/b&gt;: In planning. &lt;br /&gt;&lt;br /&gt;The web interface right now is going to be using LAMP Linux, Apache, mySQL and PHP.&amp;nbsp; The code is going to based on the Zend Framework and a UI library I started writng a while back. The front end is going to use jQuery and jQueryUI. Graphs will use the Google Graph API.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Goals&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Work on a varety of platforms and screen sizes&lt;/li&gt;&lt;li&gt;Use Web 2.0 Ajax etc. Jquery&lt;/li&gt;&lt;li&gt;Create an interactive Remote for the network &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Current Issues&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Server local or remote?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;A good webserver is hard for an average user to setup. A remote server can also handle more users. User can also access the remote to get info about power/data outages&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-1296194022431832036?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/1296194022431832036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/goals-and-issues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1296194022431832036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1296194022431832036'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/goals-and-issues.html' title='Goals and Issues'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-6641534546537020946</id><published>2010-11-02T17:15:00.000-07:00</published><updated>2010-11-02T20:04:57.376-07:00</updated><title type='text'>XML-RPC A better way to connect Processing and the Web</title><content type='html'>After yesterdays post about how to connect the webserver to the processing sketch, I thought that there had to be a better way and there is.&lt;br /&gt;&lt;br /&gt;There is a nice &lt;a href="http://plw.media.mit.edu/people/arikan/xmlrpclib/"&gt;XML-RPC Library&lt;/a&gt; for Processing that someone at MIT wrote. XML-RPC is very common on the web so there are multiple ways to implement in php, &lt;strike&gt;the best way is probably with the built in &lt;a href="http://php.net/manual/en/book.xmlrpc.php"&gt;XML-RPC Class&lt;/a&gt;&lt;/strike&gt;. After reading the documentation the built in funtions aren't well documented. It looks like I will be using the &lt;a href="http://zendframework.com/manual/en/zend.xmlrpc.html"&gt;ZendFramework XML-RPC Module&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-6641534546537020946?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/6641534546537020946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/xml-rpc-better-way-to-connect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6641534546537020946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6641534546537020946'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/xml-rpc-better-way-to-connect.html' title='XML-RPC A better way to connect Processing and the Web'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2455428274609044604</id><published>2010-11-01T20:56:00.000-07:00</published><updated>2010-11-30T16:04:31.076-08:00</updated><title type='text'>First Packet Test</title><content type='html'>The Arduino sends test packets to&amp;nbsp; processing which decodes them on screen&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5138157141/" title="IMG_3087 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_3087" height="500" src="http://farm2.static.flickr.com/1402/5138157141_58aa49084d.jpg" width="333" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Code after the jump&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Arduino Code&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #7e7e7e;"&gt;//protocol.h&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Device&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;DVC_LM33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&lt;br /&gt;#define&amp;nbsp;DVC_ST11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x02&lt;br /&gt;#define&amp;nbsp;DVC_ST15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x03&lt;br /&gt;#define&amp;nbsp;DVC_DOORCONTACT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x04&lt;br /&gt;#define&amp;nbsp;DVC_FLIPSWITCH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x05&lt;br /&gt;#define&amp;nbsp;DVC_LIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x06&lt;br /&gt;#define&amp;nbsp;DVC_MOTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x07&lt;br /&gt;#define&amp;nbsp;DVC_2LINECHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08&lt;br /&gt;#define&amp;nbsp;DVC_POWER30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08&lt;br /&gt;#define&amp;nbsp;DVC_POWER100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x09&lt;br /&gt;#define&amp;nbsp;DVC_SMARTOUTLET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x10&lt;br /&gt;#define&amp;nbsp;DVC_RGBLIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Command&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_GET_VERSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&lt;br /&gt;#define&amp;nbsp;CMD_PING&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;br /&gt;#define&amp;nbsp;CMD_PONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xE3&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_ACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_READ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xAA&lt;br /&gt;#define&amp;nbsp;CMD_WRITE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xBB&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_PORTTYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xCC&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_AUTOSENDSTART&amp;nbsp;&amp;nbsp;0xC1&lt;br /&gt;#define&amp;nbsp;CMD_AUTOSENDSTOP&amp;nbsp;&amp;nbsp;&amp;nbsp;0xC2&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;CMD_ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xFF&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//@todo&amp;nbsp;commands&amp;nbsp;for&amp;nbsp;different&amp;nbsp;data&amp;nbsp;types?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//decoded&amp;nbsp;packet&amp;nbsp;struct&lt;/span&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//if 255 = ready to send // 0 = resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;sent;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;settings;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//01010101 //version //type direct or broadcast //ack //ttl //priority //multi&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;type;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//1 single tcp, 2 single udp, 3 multipacket tcp&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;fromNode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;fromPort;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;toNode;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//00 is base //xffff is broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;toPort;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ttl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;payload[48];&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;}&amp;nbsp;DataPacketDecoded;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//simple&amp;nbsp;data&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;typedef&amp;nbsp;struct&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;ptr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;sent;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint8_t&amp;nbsp;payload[56];&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;checksum;&lt;br /&gt;}&amp;nbsp;DataPacket;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//shortcuts&amp;nbsp;to&amp;nbsp;important&amp;nbsp;bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//keeps&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;decode&amp;nbsp;the&amp;nbsp;whole&amp;nbsp;thing&amp;nbsp;to&amp;nbsp;check&amp;nbsp;simple&amp;nbsp;parts&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_LENGTH&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;#define&amp;nbsp;PACKET_SETTINGS&amp;nbsp;1&lt;br /&gt;#define&amp;nbsp;PACKET_FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;br /&gt;#define&amp;nbsp;PACKET_TO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PACKET_TTL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;#define&amp;nbsp;PACKET_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;br /&gt;#define&amp;nbsp;PACKET_COMMAND&amp;nbsp;&amp;nbsp;7&lt;br /&gt;#define&amp;nbsp;PACKET_PAYLOAD&amp;nbsp;&amp;nbsp;8&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//send_test_packet.pde&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&lt;util crc16.=""&gt;&lt;span style="color: #cc6600;"&gt;h&lt;/span&gt;&amp;gt; &lt;span style="color: #7e7e7e;"&gt;//checksum functions&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&lt;span style="color: #006699;"&gt;"protocol.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;NODE_ID&amp;nbsp;0x02&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PORT_A&amp;nbsp;DVC_LM33&lt;br /&gt;#define&amp;nbsp;PORT_B&amp;nbsp;DVC_LM33&lt;br /&gt;#define&amp;nbsp;PORT_C&amp;nbsp;DVC_LM33&lt;br /&gt;#define&amp;nbsp;PORT_D&amp;nbsp;DVC_LM33&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;PACKET_BUFFER&amp;nbsp;4&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//can be adujsted based on availbe space&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;debug&amp;nbsp;1;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//types&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//ACK&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Single&amp;nbsp;TCp&amp;nbsp;//requires&amp;nbsp;2byte&amp;nbsp;packet&amp;nbsp;ID&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Single&amp;nbsp;UDP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Multi&amp;nbsp;TCP&amp;nbsp;//requires&amp;nbsp;2byte&amp;nbsp;total&amp;nbsp;ID,&amp;nbsp;2&amp;nbsp;byte&amp;nbsp;Packet&amp;nbsp;ID&amp;nbsp;+&amp;nbsp;byte&amp;nbsp;current&amp;nbsp;packet&amp;nbsp;+&amp;nbsp;byte&amp;nbsp;total&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//multi&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//packet&amp;nbsp;id&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//current&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//total&amp;nbsp;packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;data[PACKET_BUFFER];&lt;br /&gt;DataPacketDecoded&amp;nbsp;dataDecoded[2];&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; dataPtr = 0;&lt;br /&gt;uint16_t&amp;nbsp;checksum;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; dataId = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; packetIds = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; uniqueId = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; i;&lt;br /&gt;DataPacket&amp;nbsp;incomingPacket;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//current incoming packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//incomingPacket.ptr&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; getNewPacketId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0; i &amp;lt; PACKET_BUFFER; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(data[i].payload[PACKET_SETTINGS] == 0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; getId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; uniqueId++; &lt;span style="color: #7e7e7e;"&gt;//what happens when this overflows?&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint16_t&amp;nbsp;compressAddress(uint16_t&amp;nbsp;node,&amp;nbsp;uint8_t&amp;nbsp;port)&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; (node &amp;lt;&amp;lt; 4) | (port &amp;amp; 0x0F);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;boolean&lt;/span&gt; send_packet_serial(uint8_t packetId)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0; i &amp;lt; (data[packetId].payload[PACKET_LENGTH]-2); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;_crc16_update(dataChecksum,&amp;nbsp;data[packetId].payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(data[packetId].payload[i],&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Serial.print(",");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].checksum&amp;nbsp;=&amp;nbsp;dataChecksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Serial.println("");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Serial.print("checksum: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Serial.print(dataChecksum,BYTE);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Serial.print("checksum: ");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;highByte&lt;/span&gt;(dataChecksum),&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Serial.print(",");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;lowByte&lt;/span&gt;(dataChecksum),&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;span style="color: #7e7e7e;"&gt;//*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint8_t&amp;nbsp;build_tcp_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPort,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPort,&amp;nbsp;uint8_t&amp;nbsp;command,&amp;nbsp;uint8_t&amp;nbsp;payload[48],&amp;nbsp;uint8_t&amp;nbsp;length)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; packetId = getNewPacketId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;length&amp;nbsp;+&amp;nbsp;10;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//header 8 crc 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(fromNode,&amp;nbsp;fromPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;highByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;lowByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;highByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;lowByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0;i &amp;lt; length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; packetId;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; build_udp_packet(uint16_t fromNode, uint8_t fromPort, uint16_t toNode, uint8_t toPort, uint8_t command, uint8_t payload[48], uint8_t length)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; packetId = getNewPacketId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;length&amp;nbsp;+&amp;nbsp;10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(fromNode,&amp;nbsp;fromPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;highByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;lowByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;highByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;lowByte&lt;/span&gt;(address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0;i &amp;lt; length;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[packetId].payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; packetId; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;uint8_t&amp;nbsp;build_broadcast_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPort,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPort,&amp;nbsp;uint8_t&amp;nbsp;payload[48],&amp;nbsp;uint8_t&amp;nbsp;length,&amp;nbsp;uint8_t&amp;nbsp;ttl&amp;nbsp;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; packetId = getNewPacketId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;data[packetId].&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; packetId;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; process_command(DataPacketDecoded packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;switch&lt;/span&gt; (packet.command) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;case&lt;/span&gt; CMD_PING:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//replyPacket.payload = packet.payload;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//replyPacket.command = CMD_PONG;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//replyPacket.fromNode = NODE_ID;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//send_packet(packet);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//send_packet(COMMAND_ERROR,NULL,0);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;*&amp;nbsp;turns&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;into&amp;nbsp;a&amp;nbsp;decoded&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacketDecoded&amp;nbsp;decode_packet(DataPacket&amp;nbsp;packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;decodedPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ttl&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Set Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.length&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = packet.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//settings &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.settings&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.type&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//right now these are the same things&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//From 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_FROM+1]&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;&amp;amp;0xF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//To 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_TO+1]&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;&amp;amp;0xF;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//packet id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.id&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_ID];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Command&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.command&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_COMMAND];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ptr&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=PACKET_PAYLOAD; i &amp;lt; (packet.payload[PACKET_LENGTH] - 2); i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(decodedPacket.type &amp;lt; 3) { &lt;span style="color: #7e7e7e;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decodedPacket.payload[i-PACKET_PAYLOAD]&amp;nbsp;=&amp;nbsp;packet.payload[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(decodedPacket.type == 3) {  &lt;span style="color: #7e7e7e;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.checksum=packet.checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; decodedPacket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; build_incoming_packet(uint8_t bIn)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == 0){  &lt;span style="color: #7e7e7e;"&gt;//Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(bIn == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(bIn == 255) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//aknowledge&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//delete packet from que&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//reset last pointer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (bIn &amp;gt; 128) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//stop sending current packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//flush&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;bIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;temp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//checksum &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr &amp;lt; incomingPacket.payload[PACKET_LENGTH]){ &lt;span style="color: #7e7e7e;"&gt;//add to check sum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[incomingPacket.ptr]&amp;nbsp;=&amp;nbsp;bIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;_crc16_update(checksum,&amp;nbsp;bIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == incomingPacket.payload[PACKET_LENGTH]){ &lt;span style="color: #7e7e7e;"&gt;//get first byte of checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;bIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; { &lt;span style="color: #7e7e7e;"&gt;//get second byte and check the checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;(incomingPacket.checksum&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;8)&amp;nbsp;|&amp;nbsp;bIn;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(checksum != incomingPacket.checksum) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Serial.println(checksum, DEC);  &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Serial.println(incomingPacket.checksum, DEC);   &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Serial.println("Failed CRC Check"); &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;getNewPacketId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[i]&amp;nbsp;=&amp;nbsp;incomingPacket;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.ptr=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(115200);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; message[1] = {uniqueId};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; sendPacketId =  build_udp_packet(NODE_ID, 1, 0, 0, CMD_PING, message, 1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;send_packet_serial(sendPacketId);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(2000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;/util&gt;&lt;/pre&gt;&lt;br /&gt;Processing Code &lt;br /&gt;&lt;pre&gt;&lt;span style="color: #7e7e7e;"&gt;//Device&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_LM33          = 0x01;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_ST11          = 0x02;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_ST15          = 0x03;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_DOORCONTACT   = 0x04;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_FLIPSWITCH    = 0x05;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_LIGHT         = 0x06;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_MOTION        = 0x07;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_2LINECHAR     = 0x08;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_POWER30       = 0x08;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_POWER100      = 0x09;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_SMARTOUTLET   = 0x10;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; DVC_RGBLIGHT      = 0x11;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//Command&amp;nbsp;Codes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_GET_VERSION   = 0x01;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_PING          = 65;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_PONG          = 0xE3;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_ACK           = 0x11;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_READ          = 0xAA;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_WRITE         = 0xBB;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_PORTTYPE      = 0xCC;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_AUTOSENDSTART = 0xC1;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_AUTOSENDSTOP  = 0xC2;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  CMD_ERROR         = 0xFF;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;class&lt;/span&gt; DataPacketDecoded {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; command, &lt;span style="color: #cc6600;"&gt;length&lt;/span&gt;, &lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 0, settings, type,  fromPort, toPort, id, ttl = 0, ptr = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; fromNode, toNode,  checksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;[] payload = &lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;[56];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//simple&amp;nbsp;data&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;class&lt;/span&gt; DataPacket {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; ptr = 0, &lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 0, checksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;[] payload = &lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;[64];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//shortcuts&amp;nbsp;to&amp;nbsp;important&amp;nbsp;bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//keeps&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;decode&amp;nbsp;the&amp;nbsp;whole&amp;nbsp;thing&amp;nbsp;to&amp;nbsp;check&amp;nbsp;simple&amp;nbsp;parts&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_LENGTH   = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_SETTINGS = 1;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_FROM     = 2;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_TO       = 4;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_TTL      = 4;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_ID       = 6;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_COMMAND  = 7;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PACKET_PAYLOAD  = 8;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; _crc16_update(&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; crc, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; a)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;^=&amp;nbsp;a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt; (i = 0; i &amp;lt; 8; ++i){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; ((crc &amp;amp; 1) == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1)&amp;nbsp;^&amp;nbsp;0xA001;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; crc &amp;amp; 0xFFFF;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; getId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; uniqueId++; &lt;span style="color: #7e7e7e;"&gt;//what happens when this wraps?&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; compressAddress(&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; node, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; port) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;node&amp;nbsp;=&amp;nbsp;node&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//make space&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;port&amp;nbsp;=&amp;nbsp;port&amp;nbsp;&amp;amp;&amp;nbsp;0x0F;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; node | port;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;import&lt;/span&gt; processing.serial.*;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//What&amp;nbsp;should&amp;nbsp;master&amp;nbsp;ports&amp;nbsp;be?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;  NODE_ID = 0x02;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PORT_A = DVC_LM33;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PORT_B = DVC_LM33;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PORT_C = DVC_LM33;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;final&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; PORT_D = DVC_LM33;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;data[];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; dataPtr = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; checksum;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; dataId = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; packetIds = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; uniqueId = 0;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; i;&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; DataPacket(); &lt;span style="color: #7e7e7e;"&gt;//current incoming packet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; bgcolor;        &lt;span style="color: #7e7e7e;"&gt;// Background color&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; fgcolor;        &lt;span style="color: #7e7e7e;"&gt;// Fill color&lt;/span&gt;&lt;br /&gt;Serial&amp;nbsp;myPort;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// The serial port&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;[] serialInArray = &lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;[3];    &lt;span style="color: #7e7e7e;"&gt;// Where we'll put what we receive&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; serialCount = 0;                 &lt;span style="color: #7e7e7e;"&gt;// A count of how many bytes we receive&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;boolean&lt;/span&gt; firstContact = &lt;span style="color: #cc6600;"&gt;false&lt;/span&gt;;        &lt;span style="color: #7e7e7e;"&gt;// Whether we've heard from the microcontroller&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;PFont&lt;/span&gt; myFont;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;size&lt;/span&gt;(400, 400);  &lt;span style="color: #7e7e7e;"&gt;// Stage size&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//noStroke();      // No border on the next thing drawn&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myFont&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;createFont&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Consolas"&lt;/span&gt;, 14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;textFont&lt;/span&gt;(myFont);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Print a list of the serial ports, for debugging purposes:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//println(PFont.list());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; portName = Serial.&lt;span style="color: #cc6600;"&gt;list&lt;/span&gt;()[1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; Serial(&lt;span style="color: #cc6600;"&gt;this&lt;/span&gt;, portName, 115200);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;draw&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//text("Hello",10,10);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//text("Z", 10, 220);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Draw the shape&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; serialEvent(Serial myPort) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// read a byte from the serial port:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; inByte = myPort.read();&lt;br /&gt;&amp;nbsp;&amp;nbsp;build_incoming_packet(inByte);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;//#include&amp;nbsp;&lt;util crc16.h=""&gt;&amp;nbsp;//checksum&amp;nbsp;functions&lt;/util&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;boolean&lt;/span&gt; send_packet_serial(DataPacket packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; dataChecksum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0; i &amp;lt; (packet.payload[PACKET_LENGTH]-2); i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataChecksum&amp;nbsp;=&amp;nbsp;_crc16_update(dataChecksum,&amp;nbsp;packet.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(packet.payload[i]&amp;nbsp;&amp;amp;&amp;nbsp;0xFF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.write(dataChecksum&amp;nbsp;&amp;amp;&amp;nbsp;0xFFFF); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DataPacket&amp;nbsp;build_tcp_packet(&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; fromNode, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; fromPort, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; toNode, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; toPort, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; command, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; payload[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//packet.payload[PACKET_LENGTH] = length + 8;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; address = compressAddress(fromNode, fromPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;8)&amp;nbsp;&amp;amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(address&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;8)&amp;nbsp;&amp;amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;address&amp;nbsp;&amp;amp;&amp;nbsp;0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0;i &amp;lt; payload.&lt;span style="color: #cc6600;"&gt;length&lt;/span&gt;;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; packet;&lt;br /&gt;}&lt;br /&gt;DataPacket&amp;nbsp;build_udp_packet(&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; fromNode, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; fromPort, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; toNode, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; toPort, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; command, &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; payload[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacket&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//packet.payload[PACKET_LENGTH] = length + 8;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_SETTINGS]&amp;nbsp;=&amp;nbsp;2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; address = compressAddress(fromNode, fromPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM]&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt;)(address &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt;)address &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;compressAddress(toNode,&amp;nbsp;toPort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO&amp;nbsp;]&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt;)(address &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt;)address &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_ID]&amp;nbsp;=&amp;nbsp;getId();&lt;br /&gt;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_COMMAND]&amp;nbsp;=&amp;nbsp;command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0;i &amp;lt; payload.&lt;span style="color: #cc6600;"&gt;length&lt;/span&gt;;i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;packet.payload[PACKET_PAYLOAD+i]&amp;nbsp;=&amp;nbsp;payload[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; packet; &lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;uint8_t&amp;nbsp;build_broadcast_packet(uint16_t&amp;nbsp;fromNode,&amp;nbsp;uint8_t&amp;nbsp;fromPort,&amp;nbsp;uint16_t&amp;nbsp;toNode,&amp;nbsp;uint8_t&amp;nbsp;toPort,&amp;nbsp;uint8_t&amp;nbsp;payload[48],&amp;nbsp;uint8_t&amp;nbsp;length,&amp;nbsp;uint8_t&amp;nbsp;ttl&amp;nbsp;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;&amp;nbsp;byte&amp;nbsp;packetId&amp;nbsp;=&amp;nbsp;getNewPacketId();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;&amp;nbsp;data[packetId].sent&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;packetId;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; process_command(DataPacketDecoded packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;switch&lt;/span&gt; (packet.command) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;case&lt;/span&gt; CMD_PING:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//replyPacket.payload = packet.payload;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//replyPacket.command = CMD_PONG;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//replyPacket.fromNode = NODE_ID;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//send_packet(packet);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//send_packet(COMMAND_ERROR,NULL,0);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;*&amp;nbsp;turns&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;into&amp;nbsp;a&amp;nbsp;decoded&amp;nbsp;packet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #7e7e7e;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataPacketDecoded&amp;nbsp;decode_packet(DataPacket&amp;nbsp;packet)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;decodedPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; DataPacketDecoded();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Set Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #cc6600;"&gt;length&lt;/span&gt; = packet.payload[PACKET_LENGTH];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt; = packet.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//settings &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.settings&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.type&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_SETTINGS];&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//right now these are the same things&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//From 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromNode&amp;nbsp;=&amp;nbsp;decodedPacket.fromNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_FROM+1]&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.fromPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_FROM+1]&amp;nbsp;&amp;amp;0xF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//To 12bit node id, 4 bit plug id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toNode&amp;nbsp;=&amp;nbsp;decodedPacket.toNode&amp;nbsp;|&amp;nbsp;(packet.payload[PACKET_TO+1]&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.toPort&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_TO+1]&amp;nbsp;&amp;amp;0xF;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//packet id&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.id&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_ID];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//Command&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.command&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_COMMAND];&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.checksum&amp;nbsp;=&amp;nbsp;packet.checksum;&lt;br /&gt;&amp;nbsp;&amp;nbsp;decodedPacket.ptr&amp;nbsp;=&amp;nbsp;packet.payload[PACKET_LENGTH]&amp;nbsp;-&amp;nbsp;10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=PACKET_PAYLOAD; i &amp;lt; packet.payload[PACKET_LENGTH]; i++){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(decodedPacket.type &amp;lt; 3) { &lt;span style="color: #7e7e7e;"&gt;//single packet TCP or UDP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;decodedPacket.payload[i-PACKET_PAYLOAD]&amp;nbsp;=&amp;nbsp;packet.payload[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(decodedPacket.type == 3) {  &lt;span style="color: #7e7e7e;"&gt;//broadcast&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//todo&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; decodedPacket;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; build_incoming_packet(&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; bIn)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//add timout to reset if packets get jamed&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"count: "&lt;/span&gt;+incomingPacket.ptr + &lt;span style="color: #006699;"&gt;" byte: "&lt;/span&gt; + bIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == 0){  &lt;span style="color: #7e7e7e;"&gt;//Packet length&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(bIn == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//resend last&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(bIn == 255) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//aknowledge&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//delete packet from que&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//reset last pointer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (bIn &amp;gt; 66) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//stop sending current packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//flush&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[PACKET_LENGTH]&amp;nbsp;=&amp;nbsp;bIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"length: "&lt;/span&gt;+bIn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//checksum &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr &amp;lt; (incomingPacket.payload[PACKET_LENGTH]-2)){ &lt;span style="color: #7e7e7e;"&gt;//add to check sum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.payload[incomingPacket.ptr]&amp;nbsp;=&amp;nbsp;bIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checksum&amp;nbsp;=&amp;nbsp;_crc16_update(checksum,&amp;nbsp;bIn);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(incomingPacket.ptr == (incomingPacket.payload[PACKET_LENGTH]-2)){ &lt;span style="color: #7e7e7e;"&gt;//get first byte of checksum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;bIn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; { &lt;span style="color: #7e7e7e;"&gt;//get second byte and check the checksum&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket.checksum&amp;nbsp;=&amp;nbsp;(incomingPacket.checksum&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;8)&amp;nbsp;|&amp;nbsp;(bIn&amp;nbsp;&amp;amp;&amp;nbsp;0xFF);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(checksum != incomingPacket.checksum) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"processing checksum: "&lt;/span&gt; + checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    packet checksum: "&lt;/span&gt; + incomingPacket.checksum);   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Failed CRC Check"&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"processing checksum: "&lt;/span&gt; + checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    packet checksum: "&lt;/span&gt; + incomingPacket.checksum);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Passed CRC Check"&lt;/span&gt;);  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug_incoming_packet(incomingPacket);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//check packet address, if it matches, process command, if not add to queue to resend to other nodes&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//i = getNewPacketId();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//data[i] = incomingPacket;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//process_command(incomingPacket);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//incomingPacket = DataPacket;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//reset incoming packet&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incomingPacket&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; DataPacket();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;incomingPacket.ptr++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; debug_incoming_packet(DataPacket packet) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;background&lt;/span&gt;(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"show packet info"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Packet Info"&lt;/span&gt;,5,15);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; x = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;DataPacketDecoded&amp;nbsp;packetDecoded&amp;nbsp;=&amp;nbsp;decode_packet(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  status: "&lt;/span&gt; + packetDecoded.&lt;span style="color: #cc6600;"&gt;status&lt;/span&gt;,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  length: "&lt;/span&gt; + packetDecoded.&lt;span style="color: #cc6600;"&gt;length&lt;/span&gt;,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"settings: "&lt;/span&gt; + packetDecoded.settings,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"    type: "&lt;/span&gt; + packetDecoded.type,10,x+=20); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromNode: "&lt;/span&gt; + packetDecoded.fromNode,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"fromPort: "&lt;/span&gt; + packetDecoded.fromPort,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toNode: "&lt;/span&gt; + packetDecoded.toNode,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"  toPort: "&lt;/span&gt; + packetDecoded.toPort,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ttl: "&lt;/span&gt; + packetDecoded.ttl,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"      id: "&lt;/span&gt; + packetDecoded.id,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" command: "&lt;/span&gt; + packetDecoded.command,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; message = &lt;span style="color: #006699;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(i=0; i &amp;lt; packetDecoded.ptr; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;(packetDecoded.payload[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//message += char(packetDecoded.payload[i]);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;" payload: "&lt;/span&gt; + message,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"checksum: "&lt;/span&gt; + packetDecoded.checksum,10,x+=20);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"     ptr: "&lt;/span&gt; + packetDecoded.ptr,10,x+=20);&lt;span style="color: #7e7e7e;"&gt;//*/&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2455428274609044604?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2455428274609044604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/first-packet-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2455428274609044604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2455428274609044604'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/first-packet-test.html' title='First Packet Test'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1402/5138157141_58aa49084d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-4785425839969462362</id><published>2010-11-01T19:58:00.000-07:00</published><updated>2010-11-02T17:03:33.491-07:00</updated><title type='text'>From Processing to the Web</title><content type='html'>An Arduino is connected to a PC that is running a program created in Processing. It reads the data stream from the arduino and then it can publish the data to an online service like pachube or my own server.&lt;br /&gt;&lt;br /&gt;The main user interface of my project is going to be web based so it can be used on all sorts of devices from laptops to cellphones. Processing doesn't make a very good webserver to build an interface around however there is some really good webserver software - Apache, PHP and MySQL. &lt;br /&gt;&lt;br /&gt;Linking the webserver to the Processing program is a bit of challenge. A webserver doesn't typically have a program always running, rather the program runs only when generating a web page. To send data to the webserver involved calling a webpage with get/post data. For the webserver to send data to the Processing sketch involves using a simple socket server. I haven't found any example of this online but I think I can combine some of this &lt;a href="http://processing.org/reference/libraries/net/index.html"&gt;processing code&lt;/a&gt; and some of this &lt;a href="http://us2.php.net/manual/en/sockets.examples.php"&gt;php code&lt;/a&gt; and make it work.&lt;br /&gt;&lt;br /&gt;Update: there is a better way to connect things- XML RPC&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-4785425839969462362?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/4785425839969462362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/from-processing-ing-to-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4785425839969462362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4785425839969462362'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/from-processing-ing-to-web.html' title='From Processing to the Web'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-3031124032528156041</id><published>2010-11-01T14:47:00.000-07:00</published><updated>2010-11-01T18:54:22.490-07:00</updated><title type='text'>Communication Protocol</title><content type='html'>One of the big steps is developing a language for how all the nodes talk to each other.&lt;br /&gt;&lt;br /&gt;There are several existing protocols like &lt;a href="http://en.wikipedia.org/wiki/BACnet"&gt;BACnet&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/LonWorks"&gt;LonWorks&lt;/a&gt;. These a both full featured but almost too complex for what I need right now.  I looked to see if anyone had used an arduino with either of these protocols but my search turned up blank. So I decided to write my own.&lt;br /&gt;&lt;br /&gt;Data is sent in packets. Each packet is like a letter that has a to and from address and carries a payload inside.&lt;br /&gt;&lt;br /&gt;There are several types of packets based on what sort of data is being carried&lt;br /&gt;&lt;br /&gt;The first three I plan on implementing are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TCP Packet - based on the &lt;a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol"&gt;Transmission Control Protocol&lt;/a&gt;, well a very simplified version but when a node receives one of these packets it sends a ack (acknowledgment) packet letting the sender know that the packet reached it destination.&lt;/li&gt;&lt;li&gt;UDP Packet - Based on the &lt;a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol"&gt;User Datagram Protocol&lt;/a&gt;, again a simplified version. These are packets that don't need acknowledgment. These is used when data is constantly being sent and lost packets would be outdated by the time they were resent&lt;/li&gt;&lt;li&gt;Broadcast - this is variant of UDP that doesn't have a set destination, rather it has a max number of hops that the packet will take and all nodes will take a look at it's data&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Each packet has a 8 byte header and 2 byte footer. this a lot smaller than the 20 byte header of a standard TCP packet.&lt;br /&gt;&lt;br /&gt;8 bits = 1 byte&lt;br /&gt;&lt;br /&gt;So far my protocol looks like this &lt;br /&gt;&lt;ol&gt;&lt;li&gt;8 bits - Length of Packet (could be shorter if we don't need big packets&lt;/li&gt;&lt;li&gt;8 bits - Settings (could be smaller only using 2 bits right now&lt;/li&gt;&lt;li&gt;12 bits - From node, allows for 4096 nodes&lt;/li&gt;&lt;li&gt;4 bits - From ports (allows 16 ports on a node)&lt;/li&gt;&lt;li&gt;12 bits - To Node (or ttl Time to live, if broadcast)&lt;/li&gt;&lt;li&gt;4 bits - From Port&lt;/li&gt;&lt;li&gt;8 bits - Packet ID; So that packets can be put back in the right order&lt;/li&gt;&lt;li&gt;8 bits - Command; read, write, etc&amp;nbsp; (could be shorter)&lt;/li&gt;&lt;li&gt;56 bytes Payload&lt;/li&gt;&lt;li&gt;16 bits - Checksum (verifies data didn't get corrupted in transmission) &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-3031124032528156041?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/3031124032528156041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/communication-protocol.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3031124032528156041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3031124032528156041'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/communication-protocol.html' title='Communication Protocol'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-3741560239613598908</id><published>2010-10-20T18:42:00.000-07:00</published><updated>2010-11-01T18:44:55.168-07:00</updated><title type='text'>Midterm Powerpoint</title><content type='html'>&lt;object width="500" height="375"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Farchicroc%2Fsets%2F72157625168350691%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Farchicroc%2Fsets%2F72157625168350691%2F&amp;set_id=72157625168350691&amp;jump_to="&gt;&lt;/param&gt;&lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Farchicroc%2Fsets%2F72157625168350691%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Farchicroc%2Fsets%2F72157625168350691%2F&amp;set_id=72157625168350691&amp;jump_to=" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-3741560239613598908?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/3741560239613598908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/midterm-powerpoint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3741560239613598908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3741560239613598908'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/11/midterm-powerpoint.html' title='Midterm Powerpoint'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-4420855825170432960</id><published>2010-10-20T13:14:00.000-07:00</published><updated>2010-10-20T13:14:07.238-07:00</updated><title type='text'>A Little Bit of Privacy</title><content type='html'>&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rKhbUjVyKIc?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rKhbUjVyKIc?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-4420855825170432960?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/4420855825170432960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/little-bit-of-privacy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4420855825170432960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4420855825170432960'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/little-bit-of-privacy.html' title='A Little Bit of Privacy'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2026602997693125482</id><published>2010-10-19T23:27:00.001-07:00</published><updated>2010-10-20T14:18:44.696-07:00</updated><title type='text'>Soldering Fun</title><content type='html'>A while back I got a free sample of some power meter chips. These awesome little chips can very accurately measure power consumption. I really want to build my own smart outlet and hook it up to my network. These chips will enable me to do it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5098349221/" title="IMG_2347 by ArchiCroc, on Flickr"&gt;&lt;img src="http://farm2.static.flickr.com/1230/5098349221_e40dbf1106.jpg" width="500" height="333" alt="IMG_2347" /&gt;&lt;/a&gt;&lt;br /&gt;they are tiny surface mount chips&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5098349433/" title="IMG_2354 by ArchiCroc, on Flickr"&gt;&lt;img src="http://farm2.static.flickr.com/1197/5098349433_f154b38d50.jpg" width="500" height="333" alt="IMG_2354" /&gt;&lt;/a&gt;&lt;br /&gt;to test one out on breadboard i had to solder an adapter board.  And success! One side is perfect and the other side was close, 3 pin got bridged with solder but it was easy to fix.  So far this is the smallest thing I've hand soldered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2026602997693125482?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2026602997693125482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/soldering-fun_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2026602997693125482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2026602997693125482'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/soldering-fun_19.html' title='Soldering Fun'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1230/5098349221_e40dbf1106_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-3233323104150025655</id><published>2010-10-13T18:08:00.000-07:00</published><updated>2010-10-13T18:08:40.968-07:00</updated><title type='text'>Where good Ideas come from...</title><content type='html'>&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/eNwMut3-z1Y?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/eNwMut3-z1Y?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;There was also an Article in the &lt;a href="http://online.wsj.com/article/SB10001424052748703989304575503730101860838.html"&gt;Wall Street Journal&lt;/a&gt; about Ideas&lt;br /&gt;&lt;blockquote&gt;The premise that innovation prospers when ideas can serendipitously connect and recombine with other ideas may seem logical enough, but the strange fact is that a great deal of the past two centuries of legal and folk wisdom about innovation has pursued the exact opposite argument, building walls between ideas. Ironically, those walls have been erected with the explicit aim of encouraging innovation. They go by many names: intellectual property, trade secrets, proprietary technology, top-secret R&amp;amp;D labs. But they share a founding assumption: that in the long run, innovation will increase if you put restrictions on the spread of new ideas, because those restrictions will allow the creators to collect large financial rewards from their inventions. And those rewards will then attract other innovators to follow in their path. &lt;br /&gt;&lt;br /&gt;The problem with these closed environments is that they make it more difficult to explore the adjacent possible, because they reduce the overall network of minds that can potentially engage with a problem, and they reduce the unplanned collisions between ideas originating in different fields. This is why a growing number of large organizations—businesses, nonprofits, schools, government agencies—have begun experimenting with more open models of idea exchange. &lt;/blockquote&gt;[&lt;a href="http://online.wsj.com/article/SB10001424052748703989304575503730101860838.html"&gt;WSJ&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-3233323104150025655?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/3233323104150025655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/where-good-ideas-come-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3233323104150025655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3233323104150025655'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/where-good-ideas-come-from.html' title='Where good Ideas come from...'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-3278109748561239009</id><published>2010-10-13T12:45:00.000-07:00</published><updated>2010-10-13T12:45:24.886-07:00</updated><title type='text'>Smart Mirrors</title><content type='html'>&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TP64GolT-UU?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/TP64GolT-UU?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;[&lt;a href="http://www.engadget.com/2010/10/13/cybertecture-mirror-reflects-our-fantasies-looks-set-to-become/"&gt;Engadget&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-3278109748561239009?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/3278109748561239009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/smart-mirrors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3278109748561239009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3278109748561239009'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/smart-mirrors.html' title='Smart Mirrors'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-7807634716525487863</id><published>2010-10-10T11:51:00.000-07:00</published><updated>2010-10-10T11:51:27.916-07:00</updated><title type='text'>Testing the JeeNodes</title><content type='html'>This week I finished Soldering together my first set of JeeNodes and I tested out them out by running the PingPong test program.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5066845471/" title="IMG_2330 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2330" height="333" src="http://farm5.static.flickr.com/4103/5066845471_2e40f573c9.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4NWFTZBVSeY?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4NWFTZBVSeY?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-7807634716525487863?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/7807634716525487863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/testing-jeenodes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7807634716525487863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7807634716525487863'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/testing-jeenodes.html' title='Testing the JeeNodes'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4103/5066845471_2e40f573c9_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-7937856879375549289</id><published>2010-10-10T11:41:00.000-07:00</published><updated>2010-10-10T11:41:30.413-07:00</updated><title type='text'>Adding to my Room Sensor</title><content type='html'>I also bought an ambient light sensor that suppose to be more sensitive than a Light Dependent Resistors. I needed my small arduino for another experiment so I moved everything over to a arduino mega. i2c is in a different spot so that's why the Temp/Humidity sensor moved.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5066856487/" title="IMG_2341 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2341" height="333" src="http://farm5.static.flickr.com/4085/5066856487_8cfb3640a0.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is the arduino code&lt;br /&gt;&lt;pre&gt;#include&amp;nbsp;&amp;lt;&lt;span style="color: #cc6600;"&gt;Wire&lt;/span&gt;.h&amp;gt;&lt;br /&gt;#include&amp;nbsp;&lt;libhumidity.h&gt;&lt;br /&gt;#define&amp;nbsp;samples&amp;nbsp;5&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; H[samples];&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; T[samples];&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;   L[samples];&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; current = 0;&lt;br /&gt;&lt;br /&gt;LibHumidity&amp;nbsp;humidity=LibHumidity(0);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;boolean&lt;/span&gt; readSerial()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;available&lt;/span&gt;() &amp;amp;&amp;amp; (&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;read&lt;/span&gt;()==65)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;flush&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;false&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(58, &lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(59, &lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(58, &lt;span style="color: #006699;"&gt;HIGH&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(59, &lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;H[current]=(&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt;)humidity.GetHumidity();&lt;br /&gt;&amp;nbsp;&amp;nbsp;T[current]=(&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt;)(humidity.GetTemperature() * 1.8 )+32;&lt;br /&gt;&amp;nbsp;&amp;nbsp;L[current]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;analogRead&lt;/span&gt;(3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;current++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(current == samples){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;current&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt;(readSerial() == &lt;span style="color: #cc6600;"&gt;true&lt;/span&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; h2 = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; t2 = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; l2 = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; a=0;a&lt;samples;a++){ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h2&amp;nbsp;+=" H[a];" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l2&amp;nbsp;+=" L[a];" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t2&amp;nbsp;+=" T[a];" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;="" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}=""&gt;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(h2/samples);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;','&lt;/span&gt;,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(t2/samples);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;','&lt;/span&gt;,&lt;span style="color: #006699;"&gt;BYTE&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(l2/samples);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(1000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/samples;a++){&gt;&lt;/libhumidity.h&gt;&lt;/pre&gt;And here is the Processing code that uploads the data to Pachube&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #cc6600;"&gt;import&lt;/span&gt; processing.serial.*;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;import&lt;/span&gt; eeml.*;&lt;br /&gt;&lt;br /&gt;DataOut&amp;nbsp;dOut;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; lastUpdate;&lt;br /&gt;&lt;br /&gt;Serial&amp;nbsp;myPort;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// The serial port&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; whichKey = -1;  &lt;span style="color: #7e7e7e;"&gt;// Variable to hold keystoke values&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; inByte;&lt;span style="color: #7e7e7e;"&gt;// = ' ';    // Incoming serial data&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt;[] message;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; humidity;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; temp;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; light;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;size&lt;/span&gt;(400, 300);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// create a font with the third font available to the system:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;PFont&lt;/span&gt; myFont = &lt;span style="color: #cc6600;"&gt;createFont&lt;/span&gt;(&lt;span style="color: #cc6600;"&gt;PFont&lt;/span&gt;.&lt;span style="color: #cc6600;"&gt;list&lt;/span&gt;()[2], 14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;textFont&lt;/span&gt;(myFont);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(Serial.&lt;span style="color: #cc6600;"&gt;list&lt;/span&gt;());   &lt;span style="color: #7e7e7e;"&gt;// List all the available serial ports:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;String&lt;/span&gt; portName = Serial.&lt;span style="color: #cc6600;"&gt;list&lt;/span&gt;()[2];&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; Serial(&lt;span style="color: #cc6600;"&gt;this&lt;/span&gt;, portName, 9600);&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.bufferUntil(10);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// set up DataOut object; requires URL of the EEML you are updating, and your Pachube API key   &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;dOut&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;new&lt;/span&gt; DataOut(&lt;span style="color: #cc6600;"&gt;this&lt;/span&gt;, &lt;span style="color: #006699;"&gt;"http://api.pachube.com/v2/feeds/10505.xml"&lt;/span&gt;, &lt;span style="color: #006699;"&gt;"API KEY GOES HERE"&lt;/span&gt;);   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;//  and add and tag a datastream    &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;dOut.addData(0,&lt;span style="color: #006699;"&gt;"Humidity"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;dOut.addData(1,&lt;span style="color: #006699;"&gt;"Temperature"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;dOut.addData(2,&lt;span style="color: #006699;"&gt;"Light"&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;draw&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;background&lt;/span&gt;(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Light: "&lt;/span&gt; + light, 10, 220);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Temp: "&lt;/span&gt; + temp, 10, 190);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Humidity: "&lt;/span&gt; + humidity, 10, 160);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Last Received: "&lt;/span&gt; + inByte, 10, 130);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;text&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Last Sent: "&lt;/span&gt; + lastUpdate, 10, 100);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; ((&lt;span style="color: #cc6600;"&gt;millis&lt;/span&gt;() - lastUpdate) &amp;gt; 60000){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myPort.write(65);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(5000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"ready to POST: "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dOut.update(0,&amp;nbsp;humidity);&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// update the datastream &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dOut.update(1,&amp;nbsp;temp);&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// update the datastream &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dOut.update(2,&amp;nbsp;light);&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// update the datastream &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; response = dOut.updatePachube(); &lt;span style="color: #7e7e7e;"&gt;// updatePachube() updates by an authenticated PUT HTTP request&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;println&lt;/span&gt;(response); &lt;span style="color: #7e7e7e;"&gt;// should be 200 if successful; 401 if unauthorized; 404 if feed doesn't exist&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lastUpdate&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;millis&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; serialEvent(Serial myPort) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;inByte&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;trim&lt;/span&gt;(myPort.readString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;message&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;split&lt;/span&gt;(inByte,&lt;span style="color: #006699;"&gt;','&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;humidity&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt;(message[0]);&lt;span style="color: #7e7e7e;"&gt;//float(myPort.readStringUntil(','));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;temp&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt;(message[1]);&lt;span style="color: #7e7e7e;"&gt;//float(myPort.readString());&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;light&amp;nbsp;=&amp;nbsp;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt;(message[2]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #006699;"&gt;keyPressed&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #7e7e7e;"&gt;// Send the keystroke out:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;myPort.write(65);&lt;br /&gt;&amp;nbsp;&amp;nbsp;whichKey&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;key&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-7937856879375549289?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/7937856879375549289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/adding-to-my-room-sensor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7937856879375549289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7937856879375549289'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/adding-to-my-room-sensor.html' title='Adding to my Room Sensor'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4085/5066856487_8cfb3640a0_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-4016730455202131495</id><published>2010-10-01T07:06:00.000-07:00</published><updated>2010-10-01T07:06:46.896-07:00</updated><title type='text'>Soldering Fun</title><content type='html'>I got my new soldering Iron Yesterday so I got right to work soldering one of the JeeNodes Together&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5041867636/" title="IMG_2312 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2312" height="333" src="http://farm5.static.flickr.com/4148/5041867636_3cf54e782b.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5041261974/" title="IMG_2308 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2308" height="333" src="http://farm5.static.flickr.com/4131/5041261974_eb188c2743.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5041262202/" title="IMG_2310 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2310" height="333" src="http://farm5.static.flickr.com/4110/5041262202_78cd5392e2.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Haven't tested it yet. Saving that fun for later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-4016730455202131495?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/4016730455202131495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/soldering-fun.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4016730455202131495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/4016730455202131495'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/soldering-fun.html' title='Soldering Fun'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4148/5041867636_3cf54e782b_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2948977765795012833</id><published>2010-10-01T00:26:00.000-07:00</published><updated>2010-10-01T00:28:57.759-07:00</updated><title type='text'>First Experiment: A Success!</title><content type='html'>Today I officially started my Internet of Things.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5041261792/" title="IMG_2300 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2300" height="333" src="http://farm5.static.flickr.com/4132/5041261792_862b377d3d.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;Arduino with a Humidity/Temperature Sensor&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5041262288/" title="upload feed by ArchiCroc, on Flickr"&gt;&lt;img alt="upload feed" height="327" src="http://farm5.static.flickr.com/4111/5041262288_685c9f82a9.jpg" width="406" /&gt;&lt;/a&gt;&lt;br /&gt;Basic Processing Script uploads the Humidity/Temperature of my Apartment to Pachube&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.pachube.com/feeds/10505/datastreams/0/history.png" /&gt;&lt;br /&gt;Humidity&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.pachube.com/feeds/10505/datastreams/1/history.png" /&gt;&lt;br /&gt;Temperature &lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://www.pachube.com/feeds/10505"&gt;Live feed&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2948977765795012833?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2948977765795012833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/first-experiment-success.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2948977765795012833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2948977765795012833'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/10/first-experiment-success.html' title='First Experiment: A Success!'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4132/5041261792_862b377d3d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-1797665536210602260</id><published>2010-09-28T22:28:00.000-07:00</published><updated>2010-09-28T22:28:25.847-07:00</updated><title type='text'>Reading: Interactive Architecture</title><content type='html'>&lt;a href="http://www.amazon.com/Interactive-Architecture-Michael-Fox/dp/1568988362?ie=UTF8&amp;amp;tag=ilot-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Interactive Architecture&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=ilot-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1568988362" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;"Interactive Architecture" by Michael Fox and Miles Kemp, 2009. &lt;br /&gt;&lt;br /&gt;This book is amazing. It covers the changing paradigm of architecture in the 21st century. The book covers many aspects of my Master's Project from. the embedded computing to it's environmental impact and it's effect on the sociological and psychological implications. through the next week, I write about each of it's sections and my thoughts.&lt;br /&gt;&lt;br /&gt;Physical Change - Kinetic Architecture&lt;br /&gt;&lt;br /&gt;Embedded Computation&lt;br /&gt;&lt;br /&gt;Project Landscape - Adaptable Space; Living, Working, Entertainment and Public Environments&lt;br /&gt;&lt;br /&gt;Environmental Impact - Energy Efficiency, Sustainable Solutions, Environmental Cognizance&lt;br /&gt;&lt;br /&gt;Enhancing and Extending Activities - Active Participation&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sociological and Psychological Implications - Changing Lifestyle Patterns, Behavior Awareness, Building Awareness, Sense of Place, Control of Space, Attachment to Space&lt;br /&gt;&lt;br /&gt;Design and the Profession - Designing Interactive Systems, Economic Feasibility&lt;br /&gt;&lt;br /&gt;New Horizons - Technology Transfer, Interface Design, Autonomous Robotics, Evolutionary Systems&lt;br /&gt;&lt;br /&gt;“A new epoch has begun!”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-1797665536210602260?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/1797665536210602260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-interactive-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1797665536210602260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1797665536210602260'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-interactive-architecture.html' title='Reading: Interactive Architecture'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-8305223383332808379</id><published>2010-09-28T14:29:00.000-07:00</published><updated>2010-09-28T14:31:32.328-07:00</updated><title type='text'>Article: 6 Ways to Better Living: Inside an Internet of Things Home</title><content type='html'>I did some more research on the web today on the "Internet of Things" and found this great article that summarized some of the things a web enabled house can do. Read online at &lt;a href="http://www.readwriteweb.com/archives/6_ways_to_live_better_inside_an_internet_of_things_homes.php"&gt;ReadWriteWeb&lt;/a&gt; (quoted below)&lt;br /&gt;&lt;blockquote&gt;What if we took the leading sensor-based  products currently being developed or already on the market, put them  all under one roof, and added a typical American family? Would they just  be the techiest family on the block, or would it have a significant  impact on their lives?  &lt;br /&gt;Here are six ways this &lt;a href="http://www.readwriteweb.com/archives/internet-of-things"&gt;Internet of Things&lt;/a&gt;  family can see their lives change. They exercise more, save energy and  water, budget better, know where their kids are at any moment, and  they'll always have the right lighting for activities in the house.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;h2&gt;Bank Account-based Motivation&lt;/h2&gt;We talked  last month about &lt;a href="http://www.greengoose.com/"&gt;Green Goose&lt;/a&gt;,  which is a green egg with an ethernet connection that can sense how  many miles a person has ridden on their bicycle instead of a car. This  data ultimately could be synced up with each family members' bank  account. So if they chose to ride a bike instead of a car, an automatic  transfer of the allotted monthly gas money saved goes from a checking  account into a savings account. Green Goose has plans for other similar  sensors.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;h2&gt;Health and Fitness&lt;/h2&gt;When it comes to physical fitness, this family has all the devices we explained in our &lt;a href="http://www.readwriteweb.com/archives/sensors_to_help_you_get_fit.php"&gt;sensors to keep you fit&lt;/a&gt; post. From &lt;a href="http://www.apple.com/ipod/nike/run.html"&gt;Nike Plus running shoes&lt;/a&gt;, which sends running data to Mom's iPod via a sensor, to grandpa's exercise games via &lt;a href="http://www.wiifit.com/"&gt;Wii Fit&lt;/a&gt; to their youngest son's training program via &lt;a href="http://ifit.nordictrack.com/"&gt;NordicTracks iFit&lt;/a&gt;, to Dad's &lt;a href="http://www.adidas.com/us/micoach/#GearLanding/sdf/mdf"&gt;miCoach&lt;/a&gt; pacer, this family is being encouraged by sensors to better understand and improve their physical health.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;h2&gt;Water Conservation&lt;/h2&gt;The &lt;a href="http://www.waterpebble.com/"&gt;Waterpebble&lt;/a&gt; is a simple  sensor that's placed in the shower. It measures the duration of the  first shower, and when the next person takes a shower a green light  inside the pebble will turn to orange to let the person know that their  shower-time is half way up. Once the shower goes longer than the  recorded time, the pebble gives off a red light. The best part is that  after each shower the Waterpebble will fractionally reduce the amount of  time the person will be allowed to shower. There's also a reset button  for when someone in the family is having a bad day and needs a longer  shower.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;h2&gt;Energy Use Scoreboard&lt;/h2&gt;All electrical appliances in this house plug into &lt;a href="http://videocast.com/show/92968/"&gt;Picowatt Wi-Fi smart plugs&lt;/a&gt;, which allow the family to communicate and control energy usage via a command center like Intel's prototype &lt;a href="http://www.homeqn.com/entry/intel-energy-monitor-will-tell-you-the-cost-of-running-your-appliances/"&gt;home energy monitor&lt;/a&gt;. This monitor is what the New York Times refers to as an &lt;a href="http://www.nytimes.com/2010/02/28/business/28novel.html"&gt;Energy Use Scoreboard&lt;/a&gt;,  which calculates energy usage and displays costs in real-time. Once  this technology hits the market, the family will be able to add a few  goal-setting apps to the control panel and they'll have the tools they need to minimize their energy use.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;h2&gt;Alert Services&lt;/h2&gt;Last January &lt;a href="http://www.readwriteweb.com/archives/the_emerging_era_of_alert_services_for_almost_anything.php"&gt;we reported&lt;/a&gt; on &lt;a href="http://www.trackle.com/search/"&gt;Trackle&lt;/a&gt;  and the emerging era of alert services. In the Internet of Things house  not only does Trackle alert the family about vital events and  information going on in their neighborhood, but when Mom wants to make  sure her daughter gets safely home from school on her own, she simply  puts a &lt;a href="http://www.touchatag.com/"&gt;Touchatag&lt;/a&gt; RFID tag in her backpack, which alerts Mom when her daughter is safely home.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;h2&gt;Lighting Optimization&lt;/h2&gt;Finally, this home's lighting can be regulated by &lt;a href="http://www.pachube.com/"&gt;Pachube&lt;/a&gt; (pronounced &lt;i&gt;patch-bay&lt;/i&gt;) and &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt;. As we &lt;a href="http://www.readwriteweb.com/archives/connect_your_household_lighting_to_the_web.php"&gt;reported&lt;/a&gt;  last summer, light sensors can be connected to Arduino, which is an  open-source electronics prototyping platform. The light sensor data is  then sent to Pachube, which connects the sensor data to the Web where  the lighting can be controlled via &lt;a href="http://www.readwriteweb.com/archives/automate_your_home_using_iobridge_and_twitter.php"&gt;twitter&lt;/a&gt; or via a home energy monitor. &lt;br /&gt;Overall, it's important to remember that we're still in the early  days of Internet of Things. As these products continue to develop we'll  find more and more ways for our devices to coax us to refine our health  and our environment.&lt;/blockquote&gt;&lt;br /&gt;[&lt;a href="http://www.readwriteweb.com/archives/6_ways_to_live_better_inside_an_internet_of_things_homes.php"&gt;ReadWriteWeb&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-8305223383332808379?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/8305223383332808379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/article-6-ways-to-better-living-inside.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8305223383332808379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8305223383332808379'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/article-6-ways-to-better-living-inside.html' title='Article: 6 Ways to Better Living: Inside an Internet of Things Home'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-26728011064832251</id><published>2010-09-28T01:27:00.000-07:00</published><updated>2010-09-28T01:27:51.694-07:00</updated><title type='text'></title><content type='html'>My first order of electronic parts came in today! Time to start experimenting!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5032754428/" title="IMG_2289 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2289" height="333" src="http://farm5.static.flickr.com/4090/5032754428_1fb7966706.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;Ah the unboxing. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5032754140/" title="IMG_2288 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2288" height="333" src="http://farm5.static.flickr.com/4149/5032754140_a978b2a107.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;Electronic parts look so much smaller in real life.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/archicroc/5032753824/" title="IMG_2286 by ArchiCroc, on Flickr"&gt;&lt;img alt="IMG_2286" height="333" src="http://farm5.static.flickr.com/4091/5032753824_97c666d884.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;I liked the boards from Jee Labs that I ordered a bunch a stuff from them.  All of them require assembly. My new Soldering iron won't be here until Wednesday :( (I fried my last one) So it's going to be a couple of days until I have these ready to play with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-26728011064832251?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/26728011064832251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/my-first-order-of-electronic-parts-came.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/26728011064832251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/26728011064832251'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/my-first-order-of-electronic-parts-came.html' title=''/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4090/5032754428_1fb7966706_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-341629203533652147</id><published>2010-09-28T00:25:00.000-07:00</published><updated>2010-09-28T00:25:03.263-07:00</updated><title type='text'>Reading: Refabricating Architecture</title><content type='html'>&lt;a href="http://www.amazon.com/Refabricating-Architecture-Manufacturing-Methodologies-Construction/dp/007143321X?ie=UTF8&amp;amp;tag=widgetsamazon-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Refabricating Architecture: How Manufacturing Methodologies are Poised to Transform Building Construction" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=007143321X&amp;amp;tag=widgetsamazon-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=widgetsamazon-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=007143321X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;"Refabricating Architecture" by Stephen Kieran and James Timberlake, 2004&lt;br /&gt;&lt;blockquote&gt;How Manufacturing Methodologies Are Poised to Transform Building Construction&lt;/blockquote&gt;I first read this book three years ago while researching modular construction and the KieranTimberlake's Loblolly House Project.&lt;br /&gt;&lt;br /&gt;The book looks at how we can apply ideas from other types of manufacturing like ships and cars to building construction. It got me started at looking at how building construction is lagging behind other types of construction in speed, efficiency, and technology. &lt;br /&gt;&lt;br /&gt;My favorite example is looking at how today car's are filled with complex technology. Sensors are integrated through out the car, detecting tire air pressure, engine performance, and even a crash- all to provide a safer, more efficient vehicle.  If anything thing goes wrong the cars tells us through a warning light and some now even have the ability to send information straight to your smart phone.&lt;br /&gt;&lt;br /&gt;I think it's time we started looking at how we can integrate technology into the core of architecture to create new buildings that respond to their occupants and to the environment around them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-341629203533652147?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/341629203533652147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-refabricating-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/341629203533652147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/341629203533652147'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-refabricating-architecture.html' title='Reading: Refabricating Architecture'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-6381294670560707687</id><published>2010-09-27T11:25:00.000-07:00</published><updated>2010-09-27T13:58:44.861-07:00</updated><title type='text'>Precedent: Media House Project</title><content type='html'>I first read about this project as a short article in an architecture magazine, the details were sparse but I really like the ideas.  I looked a little deeper and I discovered that the people behind the project had published an entire book detailing the project.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Media-House-Project-Computer-Structure/dp/8460908658?ie=UTF8&amp;amp;tag=ilot-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Media House Project: The House Is The Computer The Structure The Network" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=8460908658&amp;amp;tag=ilot-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=ilot-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=8460908658" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;This project, more than any other, is what inspired my thesis. &lt;br /&gt;&lt;br /&gt;The Media House Project was a joint project between UPC. Barcelona Tech and the MIT Media Lab back 2001-2002.  MIT focused on developing new technology for the home and Barcelona Tech did a series of studies on how integrate MIT's work into a new Architecture.&lt;br /&gt;&lt;blockquote&gt;The House is the Computer&lt;br /&gt;The Structure is the network&lt;/blockquote&gt;This statement sets the framework for the project. Instead of the computer being separate from the house, it is integrated into the structure of the building&lt;br /&gt;&lt;br /&gt;Most of the book was student essays detailing different aspects of the project. &lt;br /&gt;Some of my favorite essays were:&lt;br /&gt;&lt;br /&gt;Intelligent Environment: This looked at how we can augment our lives with microcomputers.&lt;br /&gt;&lt;br /&gt;Housing X-Ray: A photo essay that deconstructed the lives of several families to show how they live in their homes. It also looked at all of the stuff, furniture, knickknacks, toys, we place inside of our homes.&lt;br /&gt;&lt;br /&gt;Intelligent Space: Discussed the MIT Smart Rooms Project, and how it can be incorporated into a building&lt;br /&gt;&lt;br /&gt;Structural Model: discussed network layouts: MegaBus - Devices share a common pipeline. Ring - devices are on a ring and pass data in circular fashion. Star, Structure and Relations - devices branch off of a central node.&lt;br /&gt;&lt;br /&gt;Structure Vs Infrastructure: How MIT integrated their Internet 0 network into the the structure of the full scale demonstration Model. They used a system similar to that used in track lighting, where devices could be added as needed to the structure. &lt;br /&gt;&lt;br /&gt;Media Kitchen: This proposed an early version of the &lt;a href="http://www.microsoft.com/surface/en/us/default.aspx"&gt;Microsoft Surface&lt;/a&gt;.  They proposed using them in the kitchen as a way to organize food, layout meals, display cookbooks and more.&lt;br /&gt;&lt;br /&gt;Play place - a show case of technology for educating and entertaining children in the house. It's a lot like &lt;a href="http://www.xbox.com/en-US/kinect"&gt;Microsoft Kinect&lt;/a&gt; for Xbox&lt;br /&gt;&lt;br /&gt;Chromotherapy - An experiment of using Colored Light to affect the mood of the people in the dwelling&lt;br /&gt;&lt;br /&gt;Domos House Website - Discussed a web interface for the House, Lots of great ideas, but a lot has changed in webdesign since this book was written.&lt;br /&gt;&lt;br /&gt;Presentation -  I love the way the presented this project to the public. They built a full scale model of their experiments and then put on a performance, like a stage show, with the students showing how their piece of the project works&lt;br /&gt;&lt;br /&gt;Agenda for the Informational Home - The Closing statement of the book laid out 6 areas for the "Future Informational Home", (i would simply call it a smart house).&lt;br /&gt;1) Internet 0: the house a great brain,&lt;br /&gt;2) Internet 2: large format video.&lt;br /&gt;3) Informational structures (building the network into structure of the house)&lt;br /&gt;4) Manufacturing dwellings,&lt;br /&gt;5) Open dwelling: flexibility of distribution,&lt;br /&gt;6) The house's website&lt;br /&gt;&lt;br /&gt;These are the 6 areas I am focusing my Thesis on. My Plans:&lt;br /&gt;&lt;br /&gt;1) Build a simple network using off the shelf parts (Arduino).&lt;br /&gt;2) Not critical but worth noting:  Youtube, gigiabit lan and fiber optics already exist today, and Internet 2 is well on it's way.&lt;br /&gt;3 &amp;amp; 4) I think these go hand in hand, the future of housing is in modular construction. I think any sort of sensor network could easily be integrated inside of these modular parts and be snapped together onsite.&lt;br /&gt;5) My proposed sensor network makes traditional wiring obsolete. Switches and Light bulbs are independent, and can be reconfigured on the fly.&lt;br /&gt;6) I think the interface to the house is one of the most important parts. How do you see the information the house is producing while your at home? at Work? away at vacation? How do show off your greeness online on Social Media?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-6381294670560707687?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/6381294670560707687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/precedent-media-house-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6381294670560707687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6381294670560707687'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/precedent-media-house-project.html' title='Precedent: Media House Project'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2731538955726391536</id><published>2010-09-26T22:06:00.000-07:00</published><updated>2010-09-26T22:10:14.536-07:00</updated><title type='text'>Arduino's used in an Actual Building</title><content type='html'>They revamped the Arduino blog and they are posting some interesting stories.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.archdaily.com/wp-content/uploads/2010/02/1265657076-03mediatic-c9-1595-528x352.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://www.archdaily.com/wp-content/uploads/2010/02/1265657076-03mediatic-c9-1595-528x352.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;Some time ago I was informed that the surfaces of the amazing Media-TIC building (from Cloud 9 / Enric Ruiz Geli) were Arduino-based, sensing the environment/atmospheric changes and offering a 20% saving on climate control:&lt;br /&gt;&lt;blockquote&gt;The building is in the shape of a cube and formed by large iron beams covered in a plastic coating of inflatable bubbles, which offer glimpses of the fluorescent structure of the building. The attractive covering also has a functional utility as a way of regulating light and temperature, primarily preventing 114 tons of CO2 a year from escaping from the building, and offering a 20% saving on climate control.&lt;br /&gt;&lt;br /&gt;Every facade of the Media-TIC is different: from the outside, they reveal parts of their interior spaces and give a diverse plasticity, while from the inside they offer spectacular views.&lt;/blockquote&gt;&lt;/blockquote&gt;I did a quick search for more info on how they integrated arduino's but I haven't found anything so far&lt;br /&gt;&lt;br /&gt;Another interesting thing from the blog is that someone has created a arduino plugin for Rhino's GrassHopper &lt;br /&gt;&lt;object height="225" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14637158&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=14637158&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/14637158"&gt;Firefly for Grasshopper / Arduino&lt;/a&gt; from &lt;a href="http://vimeo.com/futurecitieslab"&gt;Jason K Johnson&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is definitely something I will look at using in the future&lt;br /&gt;&lt;br /&gt;[&lt;a href="http://arduino.cc/blog/2010/09/24/interactive-architectures-media-tic-and-interactive-buildings/"&gt;Arduino Blog&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2731538955726391536?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2731538955726391536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/arduinos-used-in-actual-building.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2731538955726391536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2731538955726391536'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/arduinos-used-in-actual-building.html' title='Arduino&apos;s used in an Actual Building'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-8993888162196007356</id><published>2010-09-26T21:49:00.000-07:00</published><updated>2010-09-26T21:49:35.493-07:00</updated><title type='text'>New Arduino's</title><content type='html'>At MakerFaire NY the folks at Arduino annouced new boards: The arduino uno, a replacement for the Duemilanove and the Arduino Uno Mega, A replacement for the mega.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://static.sparkfun.com/images/products/09950-01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://static.sparkfun.com/images/products/09950-01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The main change is a new USB to serial Chip onboard that will open up a lot of new possibilities and the mega has an even more memory.&amp;nbsp; The best part is the older boards are now going on sale! Once the old Mega drops to $40 I might buy a few more...&lt;br /&gt;&lt;br /&gt;[&lt;a href="http://arduino.cc/blog/2010/09/24/dinner-is-ready/#more-1196"&gt;Arduino Blog&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-8993888162196007356?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/8993888162196007356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/new-arduinos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8993888162196007356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8993888162196007356'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/new-arduinos.html' title='New Arduino&apos;s'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-3629690101279372498</id><published>2010-09-24T23:51:00.001-07:00</published><updated>2010-09-24T23:51:37.643-07:00</updated><title type='text'>Video: IBM- The Internet of Things</title><content type='html'>Sometimes youtube is a waste of time, sometimes you can find cool videos&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sfEbMV295Kk?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/sfEbMV295Kk?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-3629690101279372498?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/3629690101279372498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/video-ibm-internet-of-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3629690101279372498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3629690101279372498'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/video-ibm-internet-of-things.html' title='Video: IBM- The Internet of Things'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-3394291637965775289</id><published>2010-09-24T22:59:00.000-07:00</published><updated>2010-09-28T14:35:38.132-07:00</updated><title type='text'>You Too Can Join the Internet Of Things</title><content type='html'>I read a lot news online and this one relates: &lt;a href="http://bits.blogs.nytimes.com/2010/09/20/you-too-can-join-the-internet-of-things/"&gt;You Too Can Join the Internet Of Things &lt;/a&gt;. It talks about the growing open source community behind the Internet of Things. In this case using mbed.org a ARM based development kit.&amp;nbsp; ARM chips are faster than the AVR chip found on the arduinos I'm using but right now the cost is much higher and their not a whole lot of code written for them yet.&lt;br /&gt;&lt;blockquote&gt;For many years now, Silicon Valley has hyped a concept known as the Internet of Things.&lt;br /&gt;&lt;br /&gt;The thinking goes that just about everything, be it a shirt, toy, wall or milk jug, will have a chip or some kind of sensor in it that transmits information. People talk about refrigerators that can discern what’s inside of them and recommend recipes or order more milk for delivery just as that gallon jug begins to run out. Or maybe a restaurant gleans some kind of information about its wait staff based on the movement of plates.&lt;br /&gt;&lt;br /&gt;A lot of the stuff sounds hokey and adds complexity to situations where the current order of things works just fine. But advocates of the Internet of Things argue that it’s tough for us to really grasp what useful creations people will build with the sensors in these early days with the technology.&lt;/blockquote&gt;[&lt;a href="http://bits.blogs.nytimes.com/2010/09/20/you-too-can-join-the-internet-of-things/"&gt;New York Times&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;Update: Wired Posted a followup&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Will the Internet of Things Be Open or Closed?&lt;br /&gt;&lt;br /&gt;Now, at Adafruit Industries’ blog, DIY-engineering all-star Limor Fried counters the Times’ warm enthusiasm for ARM’s approach &lt;a href="http://www.adafruit.com/blog/2010/09/21/you-too-can-join-the-internet-of-things/"&gt;with some ice-water skepticism&lt;/a&gt;:  “mbed requires an online compiler, so that you are dependent on them  forever. You cannot do anything without using their online site, ever.”&lt;/blockquote&gt;&lt;br /&gt;[&lt;a href="http://www.wired.com/gadgetlab/2010/09/will-the-internet-of-things-be-open-or-closed/"&gt;Wired&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-3394291637965775289?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/3394291637965775289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/you-too-can-join-internet-of-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3394291637965775289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/3394291637965775289'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/you-too-can-join-internet-of-things.html' title='You Too Can Join the Internet Of Things'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-8085387777215785756</id><published>2010-09-24T22:33:00.000-07:00</published><updated>2010-09-24T22:34:20.769-07:00</updated><title type='text'>Reading: Smart Rooms</title><content type='html'>"Smart Rooms" by Alex P. Pentland, Scientific American April 1996, pages 68-76&lt;br /&gt;&lt;br /&gt;"In creating computer systems that can identify people and interpret their actions, researchers have come one step closer to building helpful home and work environments" &lt;br /&gt;&lt;br /&gt;This is an older article but it has some very relevant ideas. They discuss using cameras to read human movement and behavior to interact with a virtual environment. The funny thing is this is becoming a reality this year when Microsoft releases "Kinect" for the Xbox 360 for Christmas.&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4OMLjXRfaDQ?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4OMLjXRfaDQ?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I think this sort of interface is whats next for how humans will interact with computers. It opens a lot of new possibilities for how one's house can "see" it occupants and connect with them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-8085387777215785756?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/8085387777215785756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-smart-rooms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8085387777215785756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8085387777215785756'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-smart-rooms.html' title='Reading: Smart Rooms'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-1538759660746403648</id><published>2010-09-24T21:22:00.000-07:00</published><updated>2010-09-24T21:22:43.914-07:00</updated><title type='text'>Reading: Internet 0, Interdevice Internetworking</title><content type='html'>"Internet 0, Interdevice Internetworking" by Neil Gershenfeld, and Danny  Cohen, IEEE Circuits &amp;amp; Devices September/October 2006, pages  48-55 (&lt;a href="http://fab.cba.mit.edu/classes/MIT/863.06/11.27/i0.pdf"&gt;read online pdf&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;This article goes over the technical aspects of the proposed Internet-0 but It also goes over some of the background. They developed Internet-0 to be an open standard to replace the 10+ that exist currently.&amp;nbsp; This would enable competition in the market so devices made by different companies could communicate with each other much like how different brand computers can connect to the same internet.&amp;nbsp; I think this is great idea but looking at this 6 years later, it doesn't seem the idea has taken off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-1538759660746403648?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/1538759660746403648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-internet-0-interdevice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1538759660746403648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1538759660746403648'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-internet-0-interdevice.html' title='Reading: Internet 0, Interdevice Internetworking'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-2202450146758521136</id><published>2010-09-24T21:03:00.000-07:00</published><updated>2010-09-24T21:03:33.024-07:00</updated><title type='text'>Reading: The Internet of Things</title><content type='html'>"The Internet of Things" by Neil Gershenfeld, Raffi Krikorian and Danny Cohen, Scientific American October 2004, pages 76-82.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"The principles that gave rise to the internet are now leading to a new kind of network of everyday devices, an Internet-0"&lt;br /&gt;&lt;br /&gt;"Giving everyday objects the ability to connect to a data network would have a range of benefits: making it easier for homeowners to configure their lights and switches, reducing the cost and complexity of building construction, assisting with home health care. Many alternative standards currently compete to do just that— a situation reminiscent of the early days of the Internet, when computers and networks came in multiple incompatible types."&lt;br /&gt;&lt;br /&gt;"To eliminate this technological Tower of Babel, the data protocol that is at the heart of the Internet can be adopted to represent information in whatever form it takes: pulsed electrically, flashed optically, clicked acoustically, broadcast electromagnetically or printed mechanically."&lt;br /&gt;&lt;br /&gt;"Using this “Internet-0” encoding, the original idea of linking computer networks into a seamless whole—the “Inter” in “Internet”—can be extended to networks of all types of devices, a concept known as interdevice internetworking."&lt;/blockquote&gt;&lt;br /&gt;This article details the network I first read about in the "Media House Project". Internet 0 is a simplified version of Internet 1 for connecting simple devices like light switches, thermostats, locks, security sensors. They don't have need for a speed network, with expensive electronics, they only require a basic network and that can be accomplished with cheap chips.&lt;br /&gt;&lt;br /&gt;I really like this system but I think they overcomplicated things. A little background- Data over a network is sent in packets, each one has a &lt;i&gt;header&lt;/i&gt; with information about where that bit of data is from and where is is suppose to go. In system described in the article, they used the same &lt;i&gt;header&lt;/i&gt; that is used in Internet-1, It's great for sending large packets to billions of computers but on a simple network, it's overkill. I propose using the same ideas of the Internet-1 header but scaled down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-2202450146758521136?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/2202450146758521136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-internet-of-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2202450146758521136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/2202450146758521136'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-internet-of-things.html' title='Reading: The Internet of Things'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-5948083179198906732</id><published>2010-09-24T20:31:00.000-07:00</published><updated>2010-09-24T23:09:59.168-07:00</updated><title type='text'>Smart Sensors to Network the World</title><content type='html'>"Smart Sensors to Network the World" by David E. Culler and Hans Mulder, Scientific American June 2004, pages 84-91.&lt;br /&gt;&lt;blockquote&gt;"An emerging class of pillbox-size computers, outfitted with sensors and linked together by radios, can form perceptive networks able to monitor a factory, a store— even an ecosystem. Such devices will more intimately connect the cyberworld to the real world"&lt;br /&gt;&lt;br /&gt;"Thumb-size computers called motes combine microprocessors and memory with radio transceivers, onboard power supplies and a variety of sensors."&lt;br /&gt;&lt;br /&gt;"Motes are inexpensive enough to deploy by the thousands in factories, farms or wildernesses. Each mote can collect and analyze sensor readings independently but can also link up with neighboring motes in a mesh like perceptive network."&lt;br /&gt;&lt;br /&gt;"Motes are already being manufactured by Crossbow, Intel and others. Early prototype systems have helped biologists study seabird nests and redwood groves. Perceptive networks are also being developed to monitor vibrations of manufacturing equipment, strain on bridges, and people in retirement homes."&lt;/blockquote&gt;This article discussed several practical examples of sensor networks being built by UC Berkely and Intel.  They used small microcontrollers with wireless transmitters to gather environmental data.  One system being built by Intel was designed to measure the environment inside of an Intel factory monitoring temperature, humidity and vibration to detect problems before it production was affected. The article predicts that these kinds of computers will soon be found in our homes, workplaces, and public spaces and it will likely raise substantial privacy concerns.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-5948083179198906732?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/5948083179198906732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/smart-sensors-to-network-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/5948083179198906732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/5948083179198906732'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/smart-sensors-to-network-world.html' title='Smart Sensors to Network the World'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-1061236701597736646</id><published>2010-09-24T17:59:00.000-07:00</published><updated>2010-09-24T23:14:20.615-07:00</updated><title type='text'>Reading: Building around the Mind</title><content type='html'>"Building around the Mind" by Emily Anthes, Scientific American Mind April/May 2009, pages 52-59&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Brain research can help us craft spaces that relax, inspire, awaken, comfort and heal"&lt;br /&gt;&lt;br /&gt;"Architects have long intuited that the places we inhabit can affect our thoughts, feelings and behaviors. Now behavioral scientists are giving their hunches an empirical basis."&lt;br /&gt;&lt;br /&gt;"Scientists are unearthing tantalizing clues about how to design spaces that promote creativity, keep students focused and alert, and lead to relaxation and social intimacy. The results inform architectural and design decisions such as the height of ceilings, the view from windows, the shape of furniture, and the type and intensity of lighting."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This article discussed the effects of architecture on the human mind. It had in interesting story about how Jonas Stalk and how he teamed up with Louis Kahn to build the Salk Institute as the place to creative scientific breakthroughs. A study in 2007 proved that people are more creative in spaces with taller ceilings. It makes us feel less physically constrained and able to think bigger. Another study published in 2000 showed that having windows to the outside improves scored higher on tests. It proved that having a view to nature has a calming effect and improves focus.&lt;br /&gt;&lt;br /&gt;For me, this article continued my thinking about how adding technology to our environment will affect us. Will the technology be beneficial to our well being or will it just cause us stress?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-1061236701597736646?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/1061236701597736646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-building-around-mind.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1061236701597736646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/1061236701597736646'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-building-around-mind.html' title='Reading: Building around the Mind'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-8519939359924642037</id><published>2010-09-24T13:48:00.000-07:00</published><updated>2010-09-24T13:49:24.846-07:00</updated><title type='text'>OnStar Tv Ad</title><content type='html'>A lot of this project is has been inspired about how our cars are becoming smarter and I just saw a new TVad from OnStar that they have created an app to remotely monitor your car. I think we should have the same thing to monitor our homes. (app preview starts at 0:25)&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XxkYHEO74TU?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XxkYHEO74TU?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-8519939359924642037?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/8519939359924642037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/onstar-tv-ad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8519939359924642037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/8519939359924642037'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/onstar-tv-ad.html' title='OnStar Tv Ad'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-6446087101563786255</id><published>2010-09-23T09:36:00.000-07:00</published><updated>2010-09-24T23:17:02.581-07:00</updated><title type='text'>Reading: No Place like Home</title><content type='html'>"No Place like Home" by Antje Flade, Scientific American Mind February/March 2007 pages 70-75. &lt;br /&gt;&lt;blockquote&gt;"What makes a house feel like home?"&lt;br /&gt;&lt;br /&gt;"What makes for a “good home”? Generally speaking,&lt;br /&gt;five criteria seem especially important: contact with&lt;br /&gt;neighbors, privacy, flexible usage, opportunities for personalization,&lt;br /&gt;and security."&lt;br /&gt;&lt;br /&gt;"That said, people have very different ideas about what&lt;br /&gt;living accommodations should offer. These preferences&lt;br /&gt;depend on age, culture, life circumstances and previous&lt;br /&gt;housing experiences."&lt;br /&gt;&lt;/blockquote&gt;This  article got me thinking about how whether adding more technology to our  homes is a good idea. Do we want increased control or is it just increased complexity.&amp;nbsp; Will adding technology takeaway our feeling of home?&amp;nbsp; Will it enhance our feeling of home or will it cause us frustration? Perhaps there is a middle ground? I think it varies a lot from person to person. Some people want to always know whats going on in their house, but others want to leave out in the woods with only the basics. &lt;br /&gt;&lt;br /&gt;I see my system as a way to simplify home maintenance and enable an owner to take better care of their house. I admit that it adds an additional layer of complexity to ones house but think as a society we will accept this increase. New cars today are a great example; the are becoming more and more automated. We are made instantly aware if there is an issue with the engine or if a tire has low air pressure. Most drivers are oblivious to all the work car's computer does and I see my system doing the same thing for buildings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-6446087101563786255?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/6446087101563786255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-no-place-like-home.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6446087101563786255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/6446087101563786255'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/reading-no-place-like-home.html' title='Reading: No Place like Home'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/05818659732501156825</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5434766342184750662.post-7079869867149512290</id><published>2010-09-23T08:37:00.000-07:00</published><updated>2010-09-28T00:54:12.394-07:00</updated><title type='text'>Readings</title><content type='html'>I've spent the past month doing a lot of reading. I was looking through the archives of Scientific American looking for an article on the MIT Media House and I found several other interesting articles that brought up some issues I hadn't thought about before.&lt;br /&gt;&lt;br /&gt;Responses&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/reading-refabricating-architecture.html"&gt;"Refabricating Architecture" by Stephen Kieran and James Timberlake, 2004&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/reading-no-place-like-home.html"&gt;"No Place like Home" by Antje Flade, Scientific American Mind, Febuary/March 2007, pages 70-75.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/reading-building-around-mind.html"&gt;"Building around the Mind" by Emily Anthes, Scientific American Mind, April/May 2009, pages 52-59&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/smart-sensors-to-network-world.html"&gt;"Smart Sensors to Network the World" by David E. Culler and Hans Mulder, Scientific American, June 2004, pages 84-91&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/reading-smart-rooms.html"&gt;"Smart Rooms" by Alex P. Pentland, Scientific American, April 1996, pages 68-76&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/reading-internet-of-things.html"&gt;"The Internet of Things" by Neil Gershenfeld, Raffi Krikorian and Danny Cohen, Scientific American, October 2004, pages 76-82.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewdoll.blogspot.com/2010/09/reading-internet-0-interdevice.html"&gt;"Internet 0, Interdevice Internetworking" by Neil Gershenfeld, and Danny Cohen, IEEE Circuits &amp;amp; Devices, September/October 2006, pages 48-55&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5434766342184750662-7079869867149512290?l=matthewdoll.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matthewdoll.blogspot.com/feeds/7079869867149512290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/readings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7079869867149512290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5434766342184750662/posts/default/7079869867149512290'/><link rel='alternate' type='text/html' href='http://matthewdoll.blogspot.com/2010/09/readings.html' title='Readings'/><author><name>Matthew</name><uri>http://www.blogger.com/profile/058
