<?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-4399845466429044975</id><updated>2012-02-17T03:47:48.815+08:00</updated><title type='text'>allthingsbecause.org</title><subtitle type='html'>The howtos for things I couldn't find howtos for ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.allthingsbecause.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default'/><link rel='alternate' type='text/html' href='http://www.allthingsbecause.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>kim</name><uri>http://www.blogger.com/profile/09477727031231103664</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>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4399845466429044975.post-4387013300031613875</id><published>2010-05-18T05:11:00.001+08:00</published><updated>2011-03-17T13:30:12.491+08:00</updated><title type='text'>Arduino: Standalone wifi http messenger message parsing</title><content type='html'>I've been asked a few times how I do message parsing in my sketch (as in how to I get the message from the http server into the code). I was going to edit the previous post but figured with it's compexity I may as well post another. I have to start by saying that this sketch does the most basic method of message capture you can. It works for a small number of cases, but the chances that people are going to get it wrong are slim because it only does one thing. It may help in reading this post to follow along with the code &lt;a href="http://allthingsbecause.org/txts/2009_10_wilcd"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The sketch is based around the simpleserver example that handles all the web server grunt work. It works like this: in the loop area of the arduino there is a line "WiServer.server_task();" that would be a function to run all of the server functions, upkeep the wireless board, and respond to page requests on the line. When a page request is found on the line the function &lt;br /&gt;&lt;code&gt;&lt;br /&gt;boolean SendPage(char* URL)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;is run. At it's heart this function just tells the server what message to return as html as the page is requested. There is no fancy hard drive access to get web pages here though, just a URL passed in and a function "WiServer.print()" to print output. Because the URL is passed in however we can roll over it to do things by accessing the URL variable. This might respond to simple URL page requests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//something like&lt;br /&gt;if (substr(URL, 1, 5) == "test") //if characters 2 to 6 were "test"&lt;br /&gt;{&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;&lt;code&gt;WiServer.print("test was entered"); //this is written as page output and displayed by the browser&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In it's most simple form the specific characters in the URL can change something in the arduino. Say we are controlling three lights. We can check if the first character of the URL is '1' turn the first light on; '0' for off. The same occurs with the second character for the second light, third character for the third, etc. If you are interested, I have basically done this &lt;a href="http://asynclabs.com/forums/viewtopic.php?f=18&amp;amp;t=104"&gt;here&lt;/a&gt; but the crux of the code would be&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if (URL[1] == '1')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;&lt;code&gt;digitalWrite(ledPin1, true);&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;br /&gt;if (URL[1] == '0')&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;digitalWrite(ledPin1, false);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;if (URL[2] == '1')&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;digitalWrite(ledPin2, true);&lt;/div&gt;&lt;br /&gt;if (URL[2] == '0')&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;digitalWrite(ledPin2, false);&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now before I move on we'll have to talk a little bit about the URL array. It starts at 0, ends at (I'm guessing) 255. We don't know how long it is in the code but being a C string it's end will be denoted by '%5C0'. We can't really use the 0th element however because this will generally be taken up by a / to finish the server part of the URL eg the / at the end of "http://www.google.com/". When we are doing proper processing there will also be a ?variable= sort of set up.&lt;br /&gt;&lt;br /&gt;So on to my text parsing. First we need to check if the URL being requested is to generate the index page (URL will be basically empty), or if the user is trying to add a new message from the form. This is done in the line&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;"if (StrCmp(URL, "?MESSAGE=", 1, 9) == true)"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Basically if the characters 1-9 in the URL are "?MESSAGE=" then we are expecting the user is trying to add a message. And why this specific string? because I said so on the form in the index page:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;form action='/' method='get'&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;&lt;code&gt;&amp;lt;input type='text' name='MESSAGE' size='15' maxlength='40'&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;input type='submit' value='submit'&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This just tells the browser to set up a visual form. The page that will process the form is '/' (nothing), the method is get so print the form input in the URL. Then the variable name will be 'message' and print a submit button. The process takes this a converts it to the form /?MESSAGE=bleargh. Its a bit more complicated than that though. &lt;br /&gt;&lt;br /&gt;The browser can't send everything exactly as it is or the browser would get confused. How would it know the difference between the column in test-server:8080/stuff.htm and if someone had just written a column after it? It fixes this by just changing anything that could be a problem (basically anything that isn't a letter or number) to a hex representation of it's ascii code. I'll slow down a bit here, so if you know about ascii and hex skip to the next paragraph. So ASCII is the American Standard Code for Information Interchange. Computers don't talk in text; they talk in numbers. We make them talk in text by simply asssigned each letter (upper, lower), number, punctuation and a few other things to a specific number. View them all at &lt;a href="http://www.asciitable.com/"&gt;http://www.asciitable.com/&lt;/a&gt;. Hex is the base 16 representation of that number. We count decimally (by 10) but computers count in twos (binary 0s and 1s). Because of this it is more efficient to count in a numbers of twos. Base 16 counts to 16 rather than 10 (0 1 2 3 4 5 6 7 8 9 A B C D E F), so decimal 16 is hex 10. The easiest way to figure it is just to look at the web site above and look at the dec and Hx columns. When the browser finds a character it doesn't like it swaps it for %Hex ie ' ' normally changes to %20, '(' to %28. Space is different; if the browser is working correctly it should be written as a '+'. Of course they don't have to be bad characters. &lt;a href="http://www.google.com/"&gt;http://www.%67%6F%6f%67%6c%65.com&lt;/a&gt; should take you to google.com. Edit: the browser seems to convert automatically if you look at the status bar at the bottom of he screen. Know that the above link is pointing to the exact web address displayed.&lt;br /&gt;&lt;br /&gt;But I digress. Having figured that a URL does contain a message the sketch needs to convert the above hex representations and strange characters back to characters that we can display. It does this by looping through each letter and looking for the % sign that would say the character needs to be converted.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;do&lt;br /&gt;{ &lt;br /&gt;    loopLetterFound = false;&lt;br /&gt;    if (SERIALOUT) Serial.print(urlIndex);&lt;br /&gt;    if (urlIndex &amp;lt; (urlLen - 2))&lt;br /&gt;    {&lt;br /&gt;        //begin quick and dirty encoding parser&lt;br /&gt;        if (URL[urlIndex] == '%') //encoding makes non viable characters into %hh where hh is &lt;br /&gt;        {                        //the characters hex value.&lt;br /&gt;            if (SERIALOUT) Serial.println("Will test hex");&lt;br /&gt;            tmpChar = HexToInt(URL[urlIndex + 1], URL[urlIndex + 2]);&lt;br /&gt;            if (tmpChar != -1)&lt;br /&gt;            {&lt;br /&gt;                messages[0][messageIndex] = tmpChar;&lt;br /&gt;                loopLetterFound = true;&lt;br /&gt;                urlIndex += 2;&lt;br /&gt;            }&lt;br /&gt;            else //problem occured with hex conversion.&lt;br /&gt;            {&lt;br /&gt;                messages[0][messageIndex] = '%';&lt;br /&gt;                loopLetterFound = true;&lt;br /&gt;                urlIndex += 2;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If it is a '+' add a ' ' to the message.&lt;/li&gt;&lt;li&gt;If it is a % convert the next two characters to a character and add it to the message&lt;/li&gt;&lt;li&gt;Otherwise just add the character to the message.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;HexToInt just plays with the maths behind base 16 so that it can be converted back to base 10. From here we can cast as a char (character) if it isn't one already to turn it into the corresponding character. If the base 16 stuff still hurts or you want to better understand the hex2int function &lt;a href="http://mathforum.org/library/drmath/view/55797.html"&gt;this website&lt;/a&gt; explains base 16 reasonably well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4399845466429044975-4387013300031613875?l=www.allthingsbecause.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.allthingsbecause.org/feeds/4387013300031613875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.allthingsbecause.org/2010/05/arduino-standalone-wifi-http-messenger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/4387013300031613875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/4387013300031613875'/><link rel='alternate' type='text/html' href='http://www.allthingsbecause.org/2010/05/arduino-standalone-wifi-http-messenger.html' title='Arduino: Standalone wifi http messenger message parsing'/><author><name>kim</name><uri>http://www.blogger.com/profile/09477727031231103664</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-4399845466429044975.post-2601915682217295395</id><published>2009-12-14T10:23:00.000+08:00</published><updated>2011-03-17T13:13:50.420+08:00</updated><title type='text'>Arduino: Standalone wifi http messenger (expanded version)</title><content type='html'>I've Had some interest in this post, so I'm writing up a longer definition detailing some of the ins and out of the arduino, where you can buy specific parts and how the parts fit together. Note if you already know about the Arduino and shields, you should jump straight to the "On the Code" section below.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;&lt;strong&gt;Some hardware stuff:&lt;/strong&gt;&lt;/h2&gt;&lt;br /&gt;The arduino comes in a variety of forms with the arduino duemilanove being a very popular one. This is the one that I use for my projects and includes the chip itself (an Atmiga 328) along with a usb port for transferring programs / power and an actual power plug. The Atmega 328 itself has a bootloader flashed onto it (a small program that handles uploading "sketches", which are&amp;nbsp; programs). It has 2k of RAM on the chip and 32k of ROM in which to install programs (although ~2k of ROM is used by the boot loader). In function, the chip supports 14 digital I/O pins&amp;nbsp; and 6 analogue I/O pins. Of th 14 digital pins, 6 support PWM for a form of analogue output. For an introduction to the arduino I would suggest starting at &lt;a href="http://www.ladyada.net/learn/arduino/index.html" target="_blank"&gt;http://www.ladyada.net/learn/arduino/index.html&lt;/a&gt; that goes through some simple programs accessing the pins and setting up the software to create programs. Basically on the software side the arudino uses a java IDE that works with "sketches" in c like syntax. These are compiled and uploaded quite simply by the program. Also, being built in java there is a version available for windows, mac and linux.&lt;br /&gt;&lt;br /&gt;In terms of buying the hardware to start with, there are a number of online stores that sell both the arduino and the wishield. A good place to start is adafruit (&lt;a href="http://www.adafruit.com/index.php?%20main_page=product_info&amp;amp;amp;cPath=17&amp;amp;amp;products_id=68" target="_blank"&gt;http://www.adafruit.com/index.php? main_page=product_info&amp;amp;amp;cPath=17&amp;amp;amp;products_id=68&lt;/a&gt;) or sparkfun (&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666" target="_blank"&gt;http://www.sparkfun.com/commerce/product_info.php?products_id=666&lt;/a&gt;). The adafruit link there is to a pack that includes a charger, lights, resistors and a heap of other stuff that makes it easy to start off with the arduino. If you do a google search though it is quite possible to find a vendor closer to your area. From these sites you can also buy a range of LCD screens. A lot of character driven displays (ones with eg 20x4 characters) are the same and are based on the HD44780 chip which makes them very easy to set up and use. For reference, I got mine from here: &lt;a href="http://toysdownunder.com/arduino/lcd/lcd-5v-blue-20x4.html" target="_blank"&gt;http://toysdownunder.com/arduino/lcd/lcd-5v-blue-20x4.html&lt;/a&gt;. Unfortunately I am have a hard time finding the wishield on adafruit or sparkfun, but I got mine from here:&lt;a href="http://toysdownunder.com/arduino/arduino-shields/arduino-wifi-shield.html" target="_blank"&gt; http://toysdownunder.com/arduino/arduino-shields/arduino-wifi-shield.html&lt;/a&gt;. Also unfortunately this is in Australia (where I'm from) so you might have to email the owner of the site if you go through him to sort out sending overseas. You could also buy from asynclabs direct at their store: &lt;a href="http://asynclabs.com/store?page=shop.browse&amp;amp;amp;category_id=6" target="_blank"&gt;http://asynclabs.com/store?page=shop.browse&amp;amp;amp;category_id=6&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For the wishield, this is an attachment (a "shield" as they are called) that plugs into the top of the arduino to extend it's features. Basically, the 20 pins out from the arduino are aligned on either side of the board as female plugs. Shields extend the arduino's features by plugging into these with a male on the bottom of the board and extending through to a female at the top. It may be easier to explain this by looking at pictures of the arduino and wishield. The pins on the bottom of the wishield plug into the top of the arduino. This can cause some problems though as while all the pins are extended through to the top of the shield (so you can plug other things in), some are used by the wishield itself and cannot be used. On this build I had to take care not to use specific pins used by the wishield with the LCD (because both used quite a lot). In hindsite it probably would have been better to use just an ethernet shield rather than a wifi one. It would probably use less pins and the wifi adds another possible problem to development. An ethernet shield would also be much cheaper.&lt;br /&gt;&lt;br /&gt;For further reading on all of these topics I would suggest:&lt;br /&gt;&lt;br /&gt;1. The arduino tutorial site I talked bout above (&lt;a href="http://www.ladyada.net/learn/arduino/index.html" target="_blank"&gt;http://www.ladyada.net/learn/arduino/index.html&lt;/a&gt;)&lt;br /&gt;2. After installing the arduino software it comes with a large range of examples programs to look at, pull apart etc.&lt;br /&gt;3. The arduino site also has a lot of tutorials about all sorts of arduino activities (&lt;a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"&gt;http://arduino.cc/en/Tutorial/HomePage&lt;/a&gt;)&lt;br /&gt;4. For the LCD specifically the arudino site has a good writeup on how to talk to it (&lt;a href="http://arduino.cc/en/Tutorial/LiquidCrystal" target="_blank"&gt;http://arduino.cc/en/Tutorial/LiquidCrystal&lt;/a&gt;) via the liquidcrystal library. (&lt;a href="http://www.arduino.cc/en/Reference/LiquidCrystal" target="_blank"&gt;http://www.arduino.cc/en/Reference/LiquidCrystal&lt;/a&gt;)&lt;br /&gt;5. For the wishield specifically the asynclabs wiki will explain how to set it up along with sample programs (&lt;a href="http://asynclabs.com/wiki/index.php?title=AsyncLabsWiki" target="_blank"&gt;http://asynclabs.com/wiki/index.php?title=AsyncLabsWiki&lt;/a&gt;)&lt;br /&gt;6. The arduino.cc forum is a great place for more advanced stuff (&lt;a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl" target="_blank"&gt;http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;strong&gt;On to the code:&lt;/strong&gt;&lt;/h2&gt;&lt;br /&gt;The server is very simple and is implemented in code as a header file; this is because of the relatively low power of the arduino. To explain how it works I will first explain a normal web server. In a normal web server everything is separate and largely reliant on operating system functions. The operating would handle the network interface via a driver to control it. It would accept packets sent to it, deconstruct them and send the information within them onto the server (eg Apache web server) that would act upon them. In general this means to check the URI (Uniform Resource Identifier) for the page required. The server program gets that page from the hard drive (again via operating system calls), compiles it as required and sends the information back to the OS to be put into packets and sent. Most of the functionality therefore is performed by the operating system with the server only required to generate the page. The page itself can be written in a multitude of web languages (in plain text) because the web browser compiles and maintains the pages automatically. In terms of the &lt;a href="http://en.wikipedia.org/wiki/OSI_model" target="_blank"&gt;OSI Model&lt;/a&gt; the operating system performs all functions up to session (the sixth), with the web server only fulfilling the application layer.&lt;br /&gt;&lt;br /&gt;The arduino + wishield handles serving web pages at a much lower level. The wishield itself has a driver that is written in c and compiled into the program when you create it. This handles the set up / configuration (which pins to use etc.) as well as general running of the wishield. The device as a whole splits the network stack between the arduino and the wishield. The wishield handles the OSI model up to around session before handing data off to the arduino for processing. The reason for this of course is that the arduino itself only has 2k of RAM; a full size&amp;nbsp;Ethernet&amp;nbsp;packet (1492 bytes) would largely fill this. The wishield however is a dump chip that requires a reasonable amount of arduino side programming to make it work.&lt;br /&gt;&lt;br /&gt;The server itself is also written in c and loaded as a header. I used the SimpleServer application as a basis; It is available in File -&amp;gt; Examples -&amp;gt; WiShield -&amp;gt; SimpleServer&amp;nbsp;once you have installed the wishield drivers and examples. This server handles the sockets and connections, accepting requests for a web page (GET) and returning status 200 (OK) along with a coded web page. With the use of constructs, variables, etc you can then check the requested URL and send whichever page is required. For a much simpler project involving this webserver you should check out my led server writeup at &lt;a href="http://asynclabs.com/forums/viewtopic.php?f=18&amp;amp;t=104"&gt;http://asynclabs.com/forums/viewtopic.php?f=18&amp;amp;t=104&lt;/a&gt;. This checks the url and turns a set of leds on or off as required. For a step in the other direction, you could check out tjk's wifi SMS gateway project at &lt;a href="http://asynclabs.com/forums/viewtopic.php?f=18&amp;amp;t=89"&gt;http://asynclabs.com/forums/viewtopic.php?f=18&amp;amp;t=89&lt;/a&gt;. For more generic information on the server itself you should check out the asynclabs example wiki page at &lt;a href="http://asynclabs.com/wiki/index.php?title=AsyncLabsWiki"&gt;http://asynclabs.com/wiki/index.php?title=AsyncLabsWiki&lt;/a&gt;, or a short page on the webserver itself at &lt;a href="http://asynclabs.com/wiki/index.php?title=WebServer_sketch"&gt;http://asynclabs.com/wiki/index.php?title=WebServer_sketch&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In terms of setting up the wishield on a network, this is hard coded into the software before it is uploaded. It may be possible to set up the network after the setup of the device, but I didn't have to go&amp;nbsp;into it. The specific section of the code if you are interested comes looks like this:&lt;br /&gt;&lt;br /&gt;// Wireless configuration parameters ----------------------------------------&lt;br /&gt;&lt;br /&gt;unsigned char local_ip[] = {10,1,1,5};&amp;nbsp;&amp;nbsp;&amp;nbsp; // IP address of WiShield&lt;br /&gt;&lt;br /&gt;unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address&lt;br /&gt;&lt;br /&gt;unsigned char subnet_mask[] = {255,0,0,0};&amp;nbsp;&amp;nbsp; // subnet mask for the local network&lt;br /&gt;&lt;br /&gt;const prog_char ssid[] PROGMEM = {"DLINK"};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // max 32 bytes&lt;br /&gt;&lt;br /&gt;unsigned char security_type = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2&lt;br /&gt;&lt;br /&gt;// WPA/WPA2 passphrase&lt;br /&gt;&lt;br /&gt;const prog_char security_passphrase[] PROGMEM = {"12345678"};&amp;nbsp;&amp;nbsp; // max 64 characters&lt;br /&gt;&lt;br /&gt;// WEP 128-bit keys&lt;br /&gt;&lt;br /&gt;// sample HEX keys&lt;br /&gt;&lt;br /&gt;prog_uchar wep_keys[] PROGMEM = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Key 0&lt;br /&gt;&lt;br /&gt;0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Key 1&lt;br /&gt;&lt;br /&gt;0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Key 2&lt;br /&gt;&lt;br /&gt;0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Key 3&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// setup the wireless mode&lt;br /&gt;&lt;br /&gt;// infrastructure - connect to AP&lt;br /&gt;&lt;br /&gt;// adhoc - connect to another WiFi device&lt;br /&gt;&lt;br /&gt;Here I set up a simple connection without encryption on the 10.1.1.5 network. The default gateway is left at 192.168.1.1 because my build did not need client access to the internet. It uses the 255.0.0.0&amp;nbsp;subnet and will automatically try to connect to the "DLINK" network.&lt;br /&gt;&lt;br /&gt;This will do for now. If anyone else has any questions post them here and I will update this page. Also if you spot anything wrong or worthy of improvement drop me a line at kimbecause -a-t- gmail dot com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4399845466429044975-2601915682217295395?l=www.allthingsbecause.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.allthingsbecause.org/feeds/2601915682217295395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.allthingsbecause.org/2009/12/arduino-standalone-wifi-http-messenger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/2601915682217295395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/2601915682217295395'/><link rel='alternate' type='text/html' href='http://www.allthingsbecause.org/2009/12/arduino-standalone-wifi-http-messenger.html' title='Arduino: Standalone wifi http messenger (expanded version)'/><author><name>kim</name><uri>http://www.blogger.com/profile/09477727031231103664</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-4399845466429044975.post-2026509326545982493</id><published>2009-10-01T15:23:00.001+08:00</published><updated>2011-03-17T22:20:13.264+08:00</updated><title type='text'>Arduino: Standalone wifi http messenger</title><content type='html'>So I got an &lt;a href="http://en.wikipedia.org/wiki/Arduino" target="_blank"&gt;arduino&lt;/a&gt; and &lt;a href="http://asynclabs.com/" target="_blank"&gt;wishield&lt;/a&gt; the other day and was wondering what cool stuff I could do with it. Coupled with the lcd that I had as well I figured I may as well just combine everything into a funky little message screen.&amp;nbsp; I started off by getting the lcd working on the breadboard. This took a while in itself and I think by the end I must have known every pin on the board. This was pretty messy I was using wires I had cut out of a network cable and they kept breaking and pulling out of their sockets. A trip to my local &lt;a href="http://jaycar.com.au/" target="_blank"&gt;jaycar electronics&lt;/a&gt; was in order.&lt;br /&gt;&lt;br /&gt;[edit] Did have a link to it here but I turned it off.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;So I bought a new soldering iron kit, a bitchload of resistors and some prototyping boards. I soldered some headers up to the lcd to make it neater and wired this onto a board:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-agbMkLOX43M/TYIWeH_YTbI/AAAAAAAAAAc/750-Mh0RpHA/s1600/P9180123.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-agbMkLOX43M/TYIWeH_YTbI/AAAAAAAAAAc/750-Mh0RpHA/s320/P9180123.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I also bent the pins on some male to male cables so the 5v and ground cable could be easily plugged back into the arduino. The soldering is a bit messay this is the first major soldering job I've done. It's been a long time since I was a kid ripping resistors out of old electronics to use later. So I tested it, stuck it all together and ended up something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-gkx38bnFnAA/TYIWeXBfx9I/AAAAAAAAAAk/cotNeWChI0I/s1600/P9180125.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-gkx38bnFnAA/TYIWeXBfx9I/AAAAAAAAAAk/cotNeWChI0I/s320/P9180125.JPG" width="320" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-riD5H0yQu8w/TYIWez-6NCI/AAAAAAAAAAs/Y6WWDzHCDMs/s1600/P9180126.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-riD5H0yQu8w/TYIWez-6NCI/AAAAAAAAAAs/Y6WWDzHCDMs/s320/P9180126.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0bPplP2hgOQ/TYIWd-U3ALI/AAAAAAAAAAU/xH51YyEkzXc/s1600/P9180120.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-0bPplP2hgOQ/TYIWd-U3ALI/AAAAAAAAAAU/xH51YyEkzXc/s320/P9180120.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I had to stuff some paper down between my soldered board and the lcd because something was shorting down there and nothing was coming up. So at this stage I had done most of the coding (mostly between getting the LCD working and getting the soldered board together). I noticed however that if a message came in and you missed it you wouldn't know, and that there was no way to show the message on screen. Basically there was no input or output apart from the web and lcd. So anyway ... I went back and added a button and led to a breadboard on the side. At some stage I'll put these on a proper board but cbf for the moment. So now we are up to&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2PyWCe7Za7A/TYIWfGnp6JI/AAAAAAAAAA0/FQLA7V82hcY/s1600/P9180127.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-2PyWCe7Za7A/TYIWfGnp6JI/AAAAAAAAAA0/FQLA7V82hcY/s320/P9180127.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Finally here is a little video of it in action:&lt;br /&gt;&lt;br /&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/926YKo1k2sM"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/926YKo1k2sM;rel=0" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;When the arduino receives a message it blinks the light until you press the button, which also lights up the display for the normal time. All In all I think it worked out fairly well. I have it plugged in to a 12v notebook adapter at the moment. One day I'll get a smaller wall wart because this brick isn't very efficient. My friends that I've told have had a little too much fun sending me messages. Things to do next would include as above to put the led ad switch on their own board. Change it over to battery (wouldn't last very long) or a smaller power supply. Also as it stands while the WiShield does support wep, wpa and psk2 the arduino couldn't hack the psk2 that runs on my network. At some later stage I will rectify this.&lt;br /&gt;&lt;br /&gt;For those that are interested in creating your own or something like it, here is the schematic:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-bnxPGRWMaLk/TYIXmpqJKEI/AAAAAAAAAA8/rF88Y-1qZxQ/s1600/wilcd_schematic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" src="https://lh6.googleusercontent.com/-bnxPGRWMaLk/TYIXmpqJKEI/AAAAAAAAAA8/rF88Y-1qZxQ/s320/wilcd_schematic.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I must warn you this is the first schematic I have ever done, and is of the first major electronic build I have ever done. It will quite possibly have errors either within the electrical circuit, or within how I have done the schematic itself.&lt;br /&gt;&lt;br /&gt;And finally here is the code I am running on the arduino to catch URLs and server the web page:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Edit:&lt;/h2&gt;&lt;br /&gt;I did the schematic up from my working implementation, did the switch implementation wrong when I put it into the drawing program.&lt;br /&gt;&lt;br /&gt;It should go like this:&lt;br /&gt;&lt;pre&gt;5v -------switch ----------- 10k ---------- ground&lt;br /&gt;                         |&lt;br /&gt;                         |  100 ohm&lt;br /&gt;                         |&lt;br /&gt;                       pin 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This means that normally the pin is grounded through the 100ohm and 10kohm line (pin low). When you press the switch down almost all the 5v goes through the 100 ohm to the pin (the easier path). Some leaks through the 10k ohm to ground but enough gets through to register pin high. If the ground wasn't there the pin would get floating voltage which is invalid input.&lt;br /&gt;&lt;br /&gt;In the schematic I have online we have&lt;br /&gt;&lt;pre&gt;gnd --------switch ------------ 10k ------------5v&lt;br /&gt;                           |&lt;br /&gt;                           | 100 ohm&lt;br /&gt;                           |&lt;br /&gt;                         pin 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This means that the pin always reads high through from the 5v through the 10k and 100 to pin1. When you press the switch down most of the power goes through the 10k ohm, through the switch to ground that makes a short circuit. The arduino should crash or at the very least the switch will do nothing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Edit 2:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;There was a link above to the source code that I made to run on the arduino. In moving the blog to blogger years later I lost this, but I don't know if anyone is interested enough in this project now to bother trying to find a backup. If you are reading through this and want the source post a comment and I'll go to the effort of digging through years of backups to find it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4399845466429044975-2026509326545982493?l=www.allthingsbecause.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.allthingsbecause.org/feeds/2026509326545982493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.allthingsbecause.org/2009/10/arduino-standalone-wifi-http-messenger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/2026509326545982493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/2026509326545982493'/><link rel='alternate' type='text/html' href='http://www.allthingsbecause.org/2009/10/arduino-standalone-wifi-http-messenger.html' title='Arduino: Standalone wifi http messenger'/><author><name>kim</name><uri>http://www.blogger.com/profile/09477727031231103664</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://1.bp.blogspot.com/-agbMkLOX43M/TYIWeH_YTbI/AAAAAAAAAAc/750-Mh0RpHA/s72-c/P9180123.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4399845466429044975.post-7236995175773185335</id><published>2009-09-23T07:04:00.000+08:00</published><updated>2011-03-17T13:06:16.423+08:00</updated><title type='text'>Linux: Logitech G15 with Ubuntu 9.04 Jaunty</title><content type='html'>This is another of those things that used to be quite difficult but due to the ongoing diligence of the coders is now awesomely easy.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Let's begin.&lt;br /&gt;&lt;br /&gt;First of all use the ubuntu repository to get g15daemon and g15composer. These are the programs that actually control the lcd at the lowest level:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo aptitude install g15daemon g15composer&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So once these scripts start up you should see a giant clock on your lcd screen - success at mark one. The buttons also work: the circle on the left does nothing yet (it does, but nothing useful yet). The first button changes between 12 and 24 hour, thesecond changes options on the screen. The third changes the visible screen and the fourth does nothing. From here you can also get the audacious plugin to use these programs directly:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo aptitude install audacious g15daemon-audacious&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then start audacious and go ctrl + P, then plugins -&amp;gt; visualization and click G15daemon Visualization Plugin. This screen is pretty cool so if a clock and audacious spectrum is enough for you, I would stop here. If you want more we will move on to LCDproc. I found it easier here to get the main program from the ubuntu repositories:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo aptitude install lcdproc&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will get the program and install everything inthe right places, unfortunately however it doesn't seem to like installing the g15 driver when it does it. To get this we will download the source and build the driver, and then copy it to the normal place that the lcdproc drivers live. First we will install some more supporting programs:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo aptitude install libg15render-dev libg15daemon-client-dev libg15-dev&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Also for reference everything above I found on &lt;a href="http://cccarey.wordpress.com/howtos/howto-install-lcdproc-for-logitech-g15-keyboard-on-ubuntu-804-hardy-heron/"&gt;this blog&lt;/a&gt;. Below however I will deviate a bit to make it a bit easier. We'll get the source the same as normal:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd ~/Downloads/&lt;br /&gt;sudo aptitude source lcdproc&lt;br /&gt;tar -xvzf lcdproc*&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now we have the source in a folder call lcdproc-0.5.x - for me this is 0.5.2 so I'll use that from here in. Note you may need to change the tar line above to point to the file you downloaded. Now on to compiling:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd lcdproc-0.5.2&lt;br /&gt;./configure --enable-drivers=g15&lt;br /&gt;make&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will tell the source to specifically build the g15 driver along with the server. Now we'll just set up the lcdproc file and check the paths. Stay in this folder but execute:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo nano /etc/LCDd.conf&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is the config file for the server that connects to the low level G15 hardware. From here clients connect to this and send it what to display. So firstly, in the [server] section, go down and find &lt;br /&gt;&lt;br /&gt;&lt;code&gt;Driver=curses&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Change this to&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Driver=g15&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Skip down to the section that is talking about serverscreen and uncomment the line that says&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ServerScreen=no&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will stop the server information (that you will see in just a second) from fighting with the proper screens that you want to see. Finally skip down to a line that looks something like&lt;br /&gt;&lt;br /&gt;&lt;code&gt;DriverPath=/usr/lib/lcdproc&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;(etc. - this is what mine says). Copy this to gedit or whatever and hit ctrl-X and save. You can edit the rest of that file if you want it is very well documented; just remember to back it up first. &lt;br /&gt;&lt;br /&gt;So now we will copy the driver we compiled to this directory. For me this was of course done with&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo cp server/drivers/g15.so /usr/lib/lcdproc/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;From where I was, or to use the full paths:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo cp /home/kim/Downloads/lcdproc-0.5.2/server/drivers/g15.so /usr/lib/lcdproc/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Yours may be slightly different for different lcdproc versions / different configurations of where lcdproc is looking for drivers. Now everything is set up we can restart the lcd daemon with the new settings:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo /etc/init.d/LCDd restart&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If everything worked out you should now see a screen that says "LCDproc Server" across the top and Clients / Screens down the side. This meens the server is successfully talking to the g15 daemon, which is successfully talking to the lcd. But this is more boring than the last thing it was doing you may say. But of course, we have set up the server but not a client to connect to it and tell it what to do. Run &lt;br /&gt;&lt;br /&gt;&lt;code&gt;lcdproc&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;as any user and you will see ... the time. Then it will switch to some nice system stats, and continue to cycle through random screens and the lcdproc server screen. Now the left and right square buttons move more quickly between screens. The large circle button changes between the default g15composer program and the new lcdproc daemon client program. Note also: this last little bit I got from reading between the lines of &lt;a href="http://linuxgazette.net/issue77/taneja.html"&gt;http://linuxgazette.net/issue77/taneja.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You'll probably want to kill it for a sec so you can configure it and restart it:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;killall lcdproc&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;From here it is up to you as to what you want displayed on the screen. I think it is generally easier to have only one screen active at once, switching between them is kinda distracting. The easiest way to set screens to on or off seems to be to edit the default configuration file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo nano /etc/lcdproc.conf&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The file seems well commented and fairly easy to follow. If you set all the screens to off then you can also switch them back on manually using eg&lt;br /&gt;&lt;br /&gt;&lt;code&gt;lcdproc C&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;for the cpu screen. When using this screen you may want to set foreground=true in lcdproc.conf to make it easier to test the different screens. You can see a full list of these commands for lcdproc by typing &lt;br /&gt;&lt;br /&gt;&lt;code&gt;lcdproc -h&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Alternatively a lot of programs can access LCDProc directly - a major one is xbmc (post more in the comments - what do you want to use the lcd for?). That is about it though. So &lt;br /&gt;&lt;br /&gt;FIN&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4399845466429044975-7236995175773185335?l=www.allthingsbecause.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.allthingsbecause.org/feeds/7236995175773185335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.allthingsbecause.org/2009/09/linux-logitech-g15-with-ubuntu-904.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/7236995175773185335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/7236995175773185335'/><link rel='alternate' type='text/html' href='http://www.allthingsbecause.org/2009/09/linux-logitech-g15-with-ubuntu-904.html' title='Linux: Logitech G15 with Ubuntu 9.04 Jaunty'/><author><name>kim</name><uri>http://www.blogger.com/profile/09477727031231103664</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-4399845466429044975.post-3781740254568151167</id><published>2009-09-23T06:58:00.000+08:00</published><updated>2011-03-17T13:05:27.779+08:00</updated><title type='text'>Ubuntu: Wireless on the MSI U100 (wind) With Ubuntu 9.04 Jaunty</title><content type='html'>It used to be fairly difficult to get the wireless working on any flavour of linux with this laptop. I bought mine with grand visions of wireless n and stealing the uni's wireless. This was not the case, with the 8187se chipset from realtek working badly in Windows and worse on linux. Thankfully going back to it now there is an easier way. NOTE BUT: This should only work with jaunty jackalope (9.04) that has the source driver in it's repository.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So after updating your repositories with&lt;br /&gt;&lt;code&gt;sudo aptitude update&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;we can run&lt;br /&gt;&lt;code&gt;sudo aptitude install rtl8187se-source&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to download the source and then&lt;br /&gt;&lt;code&gt;sudo m-a a-i rtl8187se&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to compile the module. From here just edit /etc/modules so it is loaded at startup:&lt;br /&gt;&lt;code&gt;echo "rtl8187se" &amp;gt;&amp;gt; /etc/modules&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Reboot the computer to load the module and set everything up and it should all be good. Run&lt;br /&gt;&lt;code&gt;lsmod | grep rtl&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to make sure the module is loaded and you should be able to connect normally using wireless manager.&lt;br /&gt;&lt;br /&gt;ANOTHER NOTE BUT: You have to make sure the wireless adapter is actually enabled, as it seems to be cut off in the laptop in hardware if it is turned off. Just press function + f11 until there is a yellow light under the sattelite icon. If you don't everything will work as normal, but you will never see any networks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4399845466429044975-3781740254568151167?l=www.allthingsbecause.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.allthingsbecause.org/feeds/3781740254568151167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.allthingsbecause.org/2009/09/ubuntu-wireless-on-msi-u100-wind-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/3781740254568151167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4399845466429044975/posts/default/3781740254568151167'/><link rel='alternate' type='text/html' href='http://www.allthingsbecause.org/2009/09/ubuntu-wireless-on-msi-u100-wind-with.html' title='Ubuntu: Wireless on the MSI U100 (wind) With Ubuntu 9.04 Jaunty'/><author><name>kim</name><uri>http://www.blogger.com/profile/09477727031231103664</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></feed>
