<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Tyson Key&#039;s Outpost</title>
	<atom:link href="http://vmlemon.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://vmlemon.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Sun, 15 Jan 2012 19:01:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='vmlemon.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Tyson Key&#039;s Outpost</title>
		<link>http://vmlemon.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://vmlemon.wordpress.com/osd.xml" title="Tyson Key&#039;s Outpost" />
	<atom:link rel='hub' href='http://vmlemon.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Thoughts on Distributed Window Systems</title>
		<link>http://vmlemon.wordpress.com/2011/10/12/thoughts-on-distributed-window-systems/</link>
		<comments>http://vmlemon.wordpress.com/2011/10/12/thoughts-on-distributed-window-systems/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 16:10:57 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Amadeus]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Distributed Window Systems]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Introspection]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[X11]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=834</guid>
		<description><![CDATA[Introduction In this post, I&#8217;ll propose Amadeus - a design for an experimental highly-distributed, extensible, and network-transparent windowing system that supports resolution-independence through the use of vector graphics technology, and scales from a single PC (or other device) to a large cluster of devices. This will hopefully be achieved via the meticulous usage of compression, and adaptive data [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=834&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><span style="text-decoration:underline;"><strong>Introduction</strong></span></p>
<p style="text-align:left;">In this post, I&#8217;ll propose Amadeus - a design for an experimental highly-distributed, extensible, and <a href="http://en.wikipedia.org/wiki/Network_transparency">network-transparent</a> windowing system that supports resolution-independence through the use of vector graphics technology, and scales from a single PC (or other device) to a large cluster of devices.</p>
<p style="text-align:left;">This will hopefully be achieved via the meticulous usage of compression, and adaptive data structures; the adoption of a multicast/broadcast architecture, and orchestration from federated or standalone Registrars.</p>
<p style="text-align:left;">My decision to write this proposal was inspired by interesting discussions with a friend regarding implementations of other systems (Display PostScript, NeWS, and the many window servers of Symbian OS); and reading various tirades against X11, plus documentation regarding various proprietary systems (especially Photon).</p>
<p style="text-align:left;">However, the system itself has a brand-new design (as far as I&#8217;m aware) &#8211; and probably plenty of stupid design mistakes that were rectified by others in the past&#8230;</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>High-Level Architecture</strong></span></p>
<p>The Amadeus architecture consists of 4 main components:</p>
<ul>
<li>The Rendering Surface &#8211; responsible for accepting hardware events, and rendering graphics data received from Applications via private channels or network broadcasts.</li>
<li>The Registrar &#8211; responsible for coordinating the activities of the rest of the architecture.</li>
<li>Applications &#8211; either built directly against a library that generates vector graphics data, and sends it to the Rendering Surface; or against a ported GUI widget toolkit (or compatibility layer for an existing windowing system) designed to do so.</li>
<li>Hardware Event Providers &#8211; responsible for collecting and dispatching hardware events.</li>
</ul>
<div>These roughly fit together, like so:</div>
<p><a href="http://vmlemon.files.wordpress.com/2011/10/dwsdiag2.png"><img class="aligncenter size-full wp-image-912" title="Distributed Window System Basic Architecture" src="http://vmlemon.files.wordpress.com/2011/10/dwsdiag2.png?w=450" alt=""   /></a></p>
<p>Responsibility for font rasterisation and management is either directly accounted for by the Rendering Surface implementation, and a suitable rasterisation library (e.g. <a href="http://www.freetype.org/">FreeType</a> or <a href="http://www.monotypeimaging.com/productsservices/itype.aspx">MonoType iType</a>) &#8211; in the case where text is embedded in <a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG</a> data, or by applications designed to deliver pre-rendered text as vector shapes and paths.</p>
<p>Descriptions of other window system architectures, such as Microsoft&#8217;s <a href="http://en.wikipedia.org/wiki/Graphics_Device_Interface">GDI</a> and various successors, <a href="http://en.wikipedia.org/wiki/X11">X11</a>, Apple&#8217;s <a href="http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202-TPXREF101">Quartz</a>, QNX&#8217;s <a href="http://www.qnx.com/products/hmi/photon.html">Photon</a>, <a href="http://demo.tudos.org/nitpicker_tutorial.html">NitPicker</a>, FreeDesktop.org&#8217;s <a href="http://wayland.freedesktop.org/architecture.html">Wayland</a>, and variants of Display PostScript are best <a href="http://www.amazon.co.uk/Distributed-Window-Systems-Featuring-OpenWindows/dp/0201416379">found</a> <a href="http://www.google.co.uk/ig?hl=en&amp;tab=ww">elsewhere</a>.</p>
<p style="text-align:center;"><strong><span style="text-decoration:underline;">Authentication and Confidentiality</span></strong></p>
<p style="text-align:left;">Authentication and confidentiality of signalling and graphical data network traffic is beyond the scope of this proposal &#8211; as other parties have more expertise in that area, and I feel that I cannot immediately improve upon existing designs. Those interested in such functionality should investigate <a href="http://web.cs.wpi.edu/~guttman/pubs/esorics-ipsec.pdf">IPSec</a> (which should work with multicasting, according to <a href="http://www.cisco.com/application/pdf/en/us/guest/netsol/ns171/c649/ccmigration_09186a008074f26a.pdf">this paper</a> from Cisco), and <abbr title="Secure Sockets Layer">SSL</abbr>/<abbr title="Transport Layer Security">TLS</abbr> (or <abbr title="Secure Shell">SSH</abbr>) for private channels.</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>The Registrar</strong></span></p>
<p style="text-align:left;">The Registrar announces its availability upon launch via network broadcasts (or multicasts); and tracks Rendering Surfaces, <abbr title="Hardware Event Providers">HWEPs</abbr> and client applications interested in either listening for hardware events, or displaying windows on a per-machine, cluster, or network basis by unique name.</p>
<p style="text-align:left;">It also stores client configuration data (e.g. connected display resolutions, the characteristics of connected <abbr title="Human Interface Devices">HIDs</abbr> (keyboards, mice and game controllers), and preferred data structure widths), in addition to orchestrating the window management activities of machines within a cluster.</p>
<p style="text-align:left;">Whilst the intention is obviously to eventually support large-scale clusters and networks of &#8220;screens and machines&#8221;, with application windows freely distributed amongst them (in the case of X11-style invocation and display of applications installed on other machines); multiple Registrar instances (supporting multiple clusters or standalone PCs) shouldn&#8217;t conflict with each other, and it should always be possible for users to decide upon levels of isolation, and appropriate network topologies.</p>
<p style="text-align:left;">Multicast DNS (as implemented in Apple&#8217;s <a href="http://developer.apple.com/library/mac/navigation/index.html?filter=Bonjour">Bonjour</a>/<a href="http://opensource.apple.com/Current/mDNSResponder">mDNSResponder</a>, and <a href="http://avahi.org/">Avahi</a>), or <a href="http://www.freedesktop.org/wiki/Software/dbus">D-BUS</a> might be feasible technology options for implementing parts of this functionality.</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>The Rendering Surface</strong></span></p>
<p>The Rendering Surface implementation accepts compressed <a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG</a> data from applications, and hardware events from <abbr title="Hardware Event Providers">HWEPs</abbr>, received via either a private channel (e.g. a transient UDP socket with a port number known by the Registrar, a UNIX domain socket, or a platform-specific IPC mechanism), or a network broadcast/multicast transmission.</p>
<p>Instances thereof must register themselves using a unique name to the Registrar (and optionally specify a private channel), and accept any relevant events from Hardware Event Providers, such as mouse clicks and movements, and keystrokes.</p>
<p>The SVG data that applications generate should accurately render using any quality SVG implementation &#8211; regardless of its ultimate bitmap data destination (e.g. a raw framebuffer, or Qt&#8217;s SVG rendering widget), post decompression.</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>Compression Algorithms and Data Structures</strong></span></p>
<p>Data structures used by Amadeus for signalling are designed to be extensible and easy to parse (explicitly identified using 64-bit field type IDs, and accompanied with content length fields); and capable of being dynamically resized to accommodate network connections with varying levels of quality (i.e. latency and bandwidth).</p>
<p>If so desired, it may be theoretically possible to adapt data structures from other protocols, to provide additional functionality &#8211; although in the case of some (e.g. the <a href="http://pvanhoof.be/files/Problems%20of%20the%20X11%20clipboard.pdf">X11 Clipboard</a> protocols), it would probably be a better idea to design new ones, in the long run.</p>
<p>Although it was originally intended that &#8220;plain&#8221; <a href="http://www.w3.org/TR/SVG11/">SVG 1.1</a> data be compressed according to the <a href="http://www.openmobilealliance.org/tech/affiliates/wap/wap-192-wbxml-20010725-a.pdf">WBXML 1.3 specification</a> from the Open Mobile Alliance, it should be possible to support alternative serialisations of an SVG data stream (e.g. <a href="http://www.json.org/fatfree.html">transformed JSON</a>), and additional compression algorithms (e.g. those implemented by <a href="http://zlib.net/">ZLib</a>/<a href="http://www.gzip.org/">GZip</a>) via the aforementioned extension mechanism.</p>
<p>An Open Source WBXML parsing and generation library (released under a variant of the BSD License, with a promotional clause), written in C++ is available from the <a href="http://sybyx.sourceforge.net/">Sybyx</a> project on SourceForge. Although I haven&#8217;t attempted to use it (yet), I received the impression that its API is reasonably clean and well-designed.</p>
<p>Bilal Siddiqui&#8217;s <a href="http://www.devx.com/xml/Article/16754">DevX.com article</a> also provides a rough idea of a conversion technique, and an archive containing a set of  XML files in both encoded, and non-encoded forms.</p>
<p>I have attempted to register the SVG 1.1 XML Document Type Definition ID (<span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">-//W3C//DTD SVG 1.1//EN</span>) with the OMA, using their <a href="http://www.openmobilealliance.org/tech/tech/omna/omna-wbxml-public-docid.htm">online form</a> &#8211; although the process failed, due to a configuration error of the Web server.</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>Compression &#8211; State of the Art</strong></span></p>
<p style="text-align:left;">Whilst I&#8217;m unaware of other, entire window system architectures utilising SVG for drawing, the technology has been successfully utilised as a <a href="http://www.svgopen.org/2008/papers/104-SVG_in_KDE/">significant part</a> of KDE&#8217;s <a href="http://www.kde.org/workspaces/">Plasma family</a> of desktop environments; for rendering icons in the AVKON/S60 user interface framework for Symbian OS (and its successors); and for a multitude of other applications.</p>
<p style="text-align:left;">However, most implementations tend to assume that graphics files are stored as plain text XML files within a local (or remote/removable) file system, and can be quickly accessed prior to rendering &#8211; which works well for most applications, but is likely to be extremely inefficient within Amadeus, due to its network-bound, distributed nature.</p>
<p style="text-align:left;">The most obvious solution to this problem would be to use one of the aforementioned compression techniques (or another) &#8211; which is reinforced by <a href="http://www.svgopen.org/2003/papers/UsingSVGFor2DContentInMobile3DGames/index.html">this</a> paper (circa 2003) from the seemingly defunct developers of the X-Forge game development toolkit, concluding that their proprietary compression technology compares favourably to PNG and JPEG bitmaps, in terms of <a href="http://www.svgopen.org/2003/papers/UsingSVGFor2DContentInMobile3DGames/index.html#S4.3">resulting file size</a>.</p>
<p style="text-align:left;">X-Forge&#8217;s developers were also able to achieve a bitmap-equivalent level of apparent image quality for a static set of textured game graphics (and further size reductions when cramming all of their resources into a ZLib-compressed archive), in addition to resolution independence &#8211; although in the case of Amadeus, it is highly likely that graphics will consist of both vector widgets, and wrapped bitmap images (e.g. photographs, Web graphics, and pre-rendered widgets from applications built against non-native toolkits), which may affect efficiency.</p>
<p style="text-align:left;">From very brief testing with GZip&#8217;s <code>-9</code> argument, I was able to compress a copy of the SVG file (exported from <a href="www.inkscape.org">InkScape</a> in &#8220;Plain SVG&#8221; format) corresponding to the architecture diagram to 1.00 KB (1,024 bytes), from 3.97 KB (4,075 bytes). The original, uncompressed version of the file, exported without optimisations to remove InkScape-specific metadata was 5.18 KB (5,314 bytes) in size.</p>
<p style="text-align:left;">As previously mentioned, I have not yet tested a WBXML implementation against these files, for comparison.</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>Bitmap Image Support</strong></span></p>
<p style="text-align:left;">Through the use of <a href="http://en.wikipedia.org/wiki/Data_URI_scheme"><code>data:</code> URIs</a>, and Base64-encoded image files, it is possible to embed bitmap graphics data into SVG content, so that the aforementioned common use cases (e.g. display of Web image content, and graphics from other windowing systems) can be supported.</p>
<p style="text-align:left;">This technique could be combined with a hybrid local-distributed image caching system that is integrated with the Registrar, <a href="http://en.wikipedia.org/wiki/Delta_encoding">delta encoding</a> of SVG payloads, and checksum-based URIs for referencing extracted bitmap image data within the cache.</p>
<p style="text-align:left;">More sophisticated approaches to this problem are described in a <a href="http://www.nomachine.com/documents/NX-XProtocolCompression.php">technical reference document</a> from NoMachine, related to their <a href="http://www.nomachine.com/products.php">NX</a> unicast display/window sharing architecture (which in turn is closely entwined with the X11 architecture).</p>
<p style="text-align:center;"><span style="text-decoration:underline;"><strong>Conclusion</strong></span></p>
<p style="text-align:left;">In isolation, distributed windowing systems; multicast architecture-based distributed systems in general; and vector-based GUIs are nothing new, conceptually. What Amadeus brings to the table is an amalgamation of these disparate concepts in the form of a modern, flexible design, that should be suitable for supporting multiple high-resolution displays, and users with wildly varying requirements.</p>
<p style="text-align:left;">Whilst I&#8217;ve left issues related to high-performance rendering of 3D graphics and video content, latency, security, and various other architectural aspects unresolved; I&#8217;ve hopefully provided an interesting starting point for debate on the design of such systems.</p>
<p style="text-align:left;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/834/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/834/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/834/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/834/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/834/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/834/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/834/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/834/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=834&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/10/12/thoughts-on-distributed-window-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>

		<media:content url="http://vmlemon.files.wordpress.com/2011/10/dwsdiag2.png" medium="image">
			<media:title type="html">Distributed Window System Basic Architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>Decoding SkypeIdentityList Clipboard Data Using Qt</title>
		<link>http://vmlemon.wordpress.com/2011/08/23/decoding-skypeidentitylist-clipboard-data-using-qt/</link>
		<comments>http://vmlemon.wordpress.com/2011/08/23/decoding-skypeidentitylist-clipboard-data-using-qt/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 17:46:46 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Clipboard]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Skype]]></category>
		<category><![CDATA[SkypeIdentityList]]></category>
		<category><![CDATA[SocialClient]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tinkering]]></category>
		<category><![CDATA[Unicode]]></category>
		<category><![CDATA[UTF-16]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=801</guid>
		<description><![CDATA[Whilst working on SocialClient (one of my numerous projects), I decided that I wanted to provide users with the ability to import Skype contact usernames from the clipboard (or via drag-and-drop), whilst using the Contact Builder dialogue: After briefly spending time searching the Web, I stumbled across an old post on the Skype fora (which happens [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=801&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Whilst working on <a href="https://bitbucket.org/vmlemon/socialclient">SocialClient</a> (one of my numerous projects), I decided that I wanted to provide users with the ability to import Skype contact usernames from the clipboard (or via drag-and-drop), whilst using the <a href="https://bitbucket.org/vmlemon/socialclient/src/tip/contactbuilder.cpp">Contact Builder dialogue</a>:</p>
<p style="text-align:center;"><a href="http://vmlemon.files.wordpress.com/2011/08/contactbuilder.png"><img class="aligncenter size-full wp-image-805" title="Contact Builder UI" src="http://vmlemon.files.wordpress.com/2011/08/contactbuilder.png?w=450" alt="Contact Builder UI"   /></a></p>
<p>After briefly spending time searching the Web, I stumbled across an old <a href="http://forum.skype.com/index.php?showtopic=372541">post</a> on the Skype fora (which happens to be the sole Google search result for &#8220;<em>SkypeIdentityList</em>&#8220;, at the moment), where someone requested information regarding the content of clipboard data generated by the Skype client &#8211; and provided some useful pointers for my own exploration.</p>
<p>With that knowledge in mind, I then obtained a <a href="http://www.winvistaclub.com/t72.html">copy</a> of the Microsoft ClipBook Viewer (which doesn&#8217;t ship with Windows 7), and had a look at its &#8220;<em>View</em>&#8221; menu, after copying a random contact from the client&#8217;s contact list:</p>
<p style="text-align:center;"><a href="http://vmlemon.files.wordpress.com/2011/08/clipbookviewer.png"><img class="aligncenter size-full wp-image-809" title="ClipBook Viewer" src="http://vmlemon.files.wordpress.com/2011/08/clipbookviewer.png?w=450&#038;h=378" alt="ClipBook Viewer" width="450" height="378" /></a></p>
<p>Saving the file, and then opening it with a hex editor (I used PSPad&#8217;s &#8220;<em>Open in Hex Editor</em>&#8221; feature &#8211; but any will suffice) revealed that the clipboard data was UTF-16-encoded text:</p>
<p style="text-align:center;"><a href="http://vmlemon.files.wordpress.com/2011/08/pspad.png"><img class="aligncenter size-full wp-image-813" title="PSPad" src="http://vmlemon.files.wordpress.com/2011/08/pspad.png?w=450&#038;h=346" alt="" width="450" height="346" /></a></p>
<p>I initially planned to utilise <span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">QString</span>&#8216;s <span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;"><a href="http://doc.qt.nokia.com/latest/qstring.html#fromUtf16">fromUtf16()</a> </span>method. However, further investigation lead me to believe that it was worse than useless in this case &#8211; since all that I had was the aforementioned opaque blob of data, which consisted of a header denoting the size of the following text payload, and I couldn&#8217;t find a way to convert it into the necessary format (a pointer to an unsigned, short integer; and a standard integer).</p>
<p>After much deliberation, and testing various potential solutions (some of which involved extracting the length data, and using it whilst iterating over the rest of the payload) that often resulted in dismal failure &#8211; involving either receiving C++ runtime assertions after attempting to access non-existent data within an array, or simply obtaining too little data to be useful, I settled upon a variant of the following solution:</p>
<pre>QString Skype::FetchUsernameFromClipboard() {

QClipboard *clipboard = QApplication::clipboard();

if (clipboard-&gt;mimeData(QClipboard::Clipboard)
     -&gt;data("SkypeIdentityList").length() != 0) {
QByteArray mimeData =
clipboard-&gt;mimeData(QClipboard::Clipboard)
     -&gt;data("SkypeIdentityList");
return Skype::ParseClipboardData(mimeData);
}

else

{
return "";
}
}

QString Skype::ParseClipboardData(QByteArray aRawData) {
QByteArray workingData = aRawData;
int stringSize = aRawData.at(0);
int pos = 0;

QString round1Data, round2Data;
char tempChar;

QMap charMap;

qDebug() &lt;&lt; "Got data:" &lt;&lt; aRawData.toHex() &lt;&lt;
    "of internal length" &lt;&lt; QString::number(stringSize);
qDebug() &lt;&lt; "Size of array after filling is" &lt;&lt; aRawData.size();

for (pos = 0; pos &lt; aRawData.length() - 5; pos++) {
tempChar = workingData.at(pos + 2 + 2);
qDebug() &lt;&lt; pos &lt;&lt; tempChar;
round1Data = round1Data + tempChar;
}

qDebug() &lt;&lt; "Processed data is " &lt;&lt; round1Data.size();

for (pos = 0; pos &lt; round1Data.size() ; pos++) {
int notNull;

if (!round1Data.at(pos).isNull()) {
notNull = pos;
qDebug() &lt;&lt; "NOT A NULL: " &lt;&lt; round1Data.at(pos)
   &lt;&lt; "AT: " &lt;&lt; pos;
charMap.insert(notNull, round1Data.at(pos));
}
}

foreach (QChar value, charMap)
round2Data = round2Data + value;

return round2Data.simplified();
}</pre>
<p>The aforementioned implementation produces the following output, when used in conjunction with the demo method:</p>
<pre>Got data: "070000006500630068006f00310032003300" of
    internal length "7"
Size of array after filling is 18
0 e
1
2 c
3
4 h
5
6 o
7
8 1
9
10 2
11
12 3
Processed data is 13
NOT A NULL: 'e' AT: 0
NOT A NULL: 'c' AT: 2
NOT A NULL: 'h' AT: 4
NOT A NULL: 'o' AT: 6
NOT A NULL: '1' AT: 8
NOT A NULL: '2' AT: 10
NOT A NULL: '3' AT: 12
"echo123"</pre>
<p>Of course, code that triggers <span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">FetchUsernameFromClipboard() <span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;">(or </span></span><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">ParseClipboardData() </span>itself) is also necessary &#8211; and the <span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">FetchUsernameFromClipboard() </span>demo function doesn&#8217;t even exist within the SocialClient codebase; but that should give a good idea as to how I implemented this.</p>
<p>It probably isn&#8217;t the most efficient technique ever, either&#8230;</p>
<p>Still, as always, please feel free to comment and make alternative suggestions.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/801/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=801&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/08/23/decoding-skypeidentitylist-clipboard-data-using-qt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>

		<media:content url="http://vmlemon.files.wordpress.com/2011/08/contactbuilder.png" medium="image">
			<media:title type="html">Contact Builder UI</media:title>
		</media:content>

		<media:content url="http://vmlemon.files.wordpress.com/2011/08/clipbookviewer.png" medium="image">
			<media:title type="html">ClipBook Viewer</media:title>
		</media:content>

		<media:content url="http://vmlemon.files.wordpress.com/2011/08/pspad.png" medium="image">
			<media:title type="html">PSPad</media:title>
		</media:content>
	</item>
		<item>
		<title>Attempting to boot Symbian^3 on the TMDSEVM3530 : Take 2</title>
		<link>http://vmlemon.wordpress.com/2011/08/01/symbian3-tmdsevm3530-second-attempt/</link>
		<comments>http://vmlemon.wordpress.com/2011/08/01/symbian3-tmdsevm3530-second-attempt/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 12:30:05 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[OMAP]]></category>
		<category><![CDATA[OMAP35x]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[Symbian^3]]></category>
		<category><![CDATA[Texas Instruments]]></category>
		<category><![CDATA[Tinkering]]></category>
		<category><![CDATA[TMDSEVM3530]]></category>
		<category><![CDATA[Wild Ducks]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=766</guid>
		<description><![CDATA[I&#8217;ve just received the USB/RS-232 adapter (which is based around the FTDI FT232BM chipset, and supported under Linux without any additional work), and connected it to the board&#8217;s UART1/2 port and my laptop using the null modem cable supplied with the board. For the curious, dmesg reports: [ 177.992226] usb 2-2: new full speed USB [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=766&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just received the USB/RS-232 adapter (which is based around the FTDI FT232BM chipset, and supported under Linux without any additional work), and connected it to the board&#8217;s UART1/2 port and my laptop using the null modem cable supplied with the board.</p>
<p>For the curious, <code>dmesg</code> reports:<br />
<code>[ 177.992226] usb 2-2: new full speed USB device using ohci_hcd and address 3<br />
[ 1090.655407] usb 2-2: USB disconnect, address 3<br />
[ 1160.036191] usb 2-2: new full speed USB device using ohci_hcd and address 4<br />
[ 1160.656891] usbcore: registered new interface driver usbserial<br />
[ 1160.656938] USB Serial support registered for generic<br />
[ 1160.659703] usbcore: registered new interface driver usbserial_generic<br />
[ 1160.659709] usbserial: USB Serial Driver core<br />
[ 1160.676061] USB Serial support registered for FTDI USB Serial Device<br />
[ 1160.677502] ftdi_sio 2-2:1.0: FTDI USB Serial Device converter detected<br />
[ 1160.677628] usb 2-2: Detected FT232BM<br />
[ 1160.677632] usb 2-2: Number of endpoints 2<br />
[ 1160.677635] usb 2-2: Endpoint 1 MaxPacketSize 64<br />
[ 1160.677639] usb 2-2: Endpoint 2 MaxPacketSize 64<br />
[ 1160.677642] usb 2-2: Setting MaxPacketSize 64<br />
[ 1160.694632] usb 2-2: FTDI USB Serial Device converter now attached to ttyUSB0<br />
[ 1160.696459] usbcore: registered new interface driver ftdi_sio<br />
[ 1160.696466] ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver</code></p>
<p><code>sudo lsusb -v</code> reports:</p>
<pre>Bus 002 Device 004: ID 0403:6001 Future Technology Devices
    International, Ltd FT232 USB-Serial (UART) IC
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x0403 Future Technology Devices
     International, Ltd
  idProduct          0x6001 FT232 USB-Serial (UART) IC
  bcdDevice            4.00
  iManufacturer           1 FTDI
  iProduct                2 USB-to-Serial
  iSerial                 3 FTE2QSKA
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower               44mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              2 USB-to-Serial
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0000
(Bus Powered)</pre>
<p>We can confirm that everything works by running <code>cat /dev/ttyUSB0 </code>from a BASH session, and powering on the board:</p>
<pre>tyson@UmBongo:~$ cat /dev/ttyUSB0 

Texas Instruments X-Loader 1.47 (Jan 14 2011 - 15:43:28)
Starting X-loader on MMC
Reading boot sector

212836 Bytes Read from MMC
Starting OS Bootloader from MMC...
Starting OS Bootloader...

U-Boot 2010.06 (Jan 14 2011 - 15:43:45)

OMAP3430/3530-GP ES3.1, CPU-OPP2 L3-165MHz
OMAP3 EVM board + LPDDR/NAND
I2C:   ready
DRAM:  128 MiB
NAND:  256 MiB
*** Warning - bad CRC or NAND, using default environment

In:    serial
Out:   serial
Err:   serial
Read back SMSC id 0xffff0000
Die ID #2f7c000400000000040365fa1801900d
Net:   smc911x-0
Hit any key to stop autoboot:  0
mmc1 is available
reading boot.scr

421 bytes read
Running bootscript from mmc ...
## Executing script at 82000000
reading uImage

** Unable to read "uImage" from mmc 0:1 **
***** RootFS: /dev/mmcblk0p2 *****
Wrong Image Format for bootm command
ERROR: can't get kernel image!
OMAP3_EVM #</pre>
<p>Obviously, since I renamed the <code>uImage</code> file on my Android SD card from earlier (to <code>kuImage</code>), the board fails to successfully boot Linux.</p>
<p>After downloading and installing <a href="http://cutecom.sourceforge.net/">CuteCom</a> (a Qt-based serial console utility), and configuring it to communicate with the board at 115200 baud, using 8 data bits, and without parity or software/hardware handshaking, the <code>help</code> command command can be issued to the board&#8217;s bootloader &#8211; which results in:</p>
<pre>OMAP3_EVM # help
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dhcp    - boot image via network using DHCP/TFTP protocol
echo    - echo args to console
editenv - edit environment variable
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
false   - do nothing, unsuccessfully
fastboot- fastboot- use USB Fastboot protocol

fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fsinfo  - print information about filesystems
fsload  - load binary file from a filesystem image
go      - start application at address 'addr'
help    - print command description/usage
i2c     - I2C sub-system
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
ls      - list files in a directory (default /)
md      - memory display
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub-system
mtest   - simple RAM read/write test
mw      - memory write (fill)
nand    - NAND sub-system
nandecc - switch OMAP3 NAND ECC calculation algorithm
nboot   - boot from NAND device
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
rarpboot- boot image via network using RARP/TFTP protocol
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
showvar - print local hushshell variables
sleep   - delay execution for some time
source  - run script from memory
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true    - do nothing, successfully
version - print monitor version
OMAP3_EVM #</pre>
<p>At this stage, it&#8217;s necessary to remove the SD card from the board, and attempt to copy a Symbian ROM image to it.</p>
<p>Unfortunately, after installing Android, it&#8217;s also necessary to resize the ~70MB primary partition in order to make it fit. The quickest way to do so would probably be to use GParted and a USB card reader, if you&#8217;re using Linux under a virtual machine (as opposed to rebooting into a Wubi installation, in order to use my laptop&#8217;s internal reader, which I was initially tempted to do).</p>
<p>An SD card prepared using the the tool from the <a href="http://vmlemon.wordpress.com/2011/07/31/symbian3-tmdsevm3530-initial-attempt/">aforementioned</a> <a href="http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_DevKit_1_0/exports/OMAP35X.tar.gz">archive</a> contains an x86 partition table, and 3 partitions (a 70.57MiB FAT32 boot partition, a 941.31MiB Ext3 root partition, and an 870.71MiB FAT32 data partition).</p>
<p>Since it is possible to reconstitute these partitions using that tool, and since they&#8217;re unnecessary for the Symbian Platform, we can remove the root and data partitions, and then resize the boot partition to be 512.97MiB in order to store the Symbian ROM with some allowances for future growth.</p>
<p>If that process fails with &#8220;<code>GNU Parted cannot resize this partition to this size. We're working on it!</code>&#8220;, then:</p>
<ul>
<li>Mount the boot partition (usually <code>sdb1</code>)</li>
<li>Copy all of its contents to a convenient location</li>
<li>Unmount the partition</li>
<li>Remove the partition using GParted</li>
<li>Create a new 512.97MiB FAT32 partition with 0MiB free space preceding it</li>
<li>Mount the newly created boot partition</li>
<li>Copy the &#8220;<code>boot.scr</code>&#8220;, &#8220;<code>MLO</code>&#8221; and &#8220;<code>u-boot.bin</code>&#8221; files from earlier to said partition</li>
<li>Unmount the partition &#8211; if you&#8217;re using a VM, and want to copy the ROM using the host OS, instead of the guest OS</li>
</ul>
<p>Now, we can attempt to copy &#8220;<code>beagle.rom.img</code>&#8221; from the &#8220;<code>ROM Images</code>&#8221; directory to the root of the boot partition as &#8220;<code>uImage</code>&#8220;, unmount the partition, and then insert the card back into the board.</p>
<p>Unfortunately, at this stage, although several LEDs on the board illuminate, I can&#8217;t see any output from it on the serial console &#8211; which leads me to suspect that the bootloader and firmware on the card isn&#8217;t being loaded. Testing using the Windows CE card lends credence to that thought.</p>
<p>Attempting to copy the <code>x-load.bin.ift</code> file from <code>/OMAP35X/Boot_Images</code> to the root of the boot partition also yields the same result.</p>
<p>After quickly making some raw sector dumps of both SD cards, I suspect that the structure of the x86 MBR/partition table, and the location of the boot partition is a factor in the ability to boot the board.</p>
<p>For comparison, <code>file</code> reports the following, for the Windows CE card:</p>
<p><code>dump: x86 boot sector, code offset 0x0, OEM-ID "MSDOS5.0", sectors/cluster 64, root entries 512, Media descriptor 0xf8, sectors/FAT 236, heads 64, hidden sectors 135, sectors 3858489 (volumes &gt; 32 MB) , serial number 0x61636637, unlabeled, FAT (16 bit)</code></p>
<p>For the modified Android card, this is reported, instead:</p>
<p><code>dump2: x86 boot sector; partition 1: ID=0xb, starthead 32, startsector 2048, 1048576 sectors, code offset 0xb8</code></p>
<p>With that in mind, since I&#8217;ve got a complete raw backup of the Windows card that I can restore later; I&#8217;ll remove the <code>EBOOTSD.NB0</code>, <code>MLO</code>, and <code>NK.BIN</code> files, and copy over the Android boot files (modulo the Linux kernel binary), plus a Symbian ROM image.</p>
<p>Lo and behold, we now have X-Loader and U-Boot, which attempt to boot our &#8220;Linux&#8221; kernel into 0&#215;82000000, but seem to get stuck afterwards.</p>
<p>After getting this far, I&#8217;ll probably take a break, and see if manual intervention at the bootloader prompt gets us any further, later. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/766/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=766&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/08/01/symbian3-tmdsevm3530-second-attempt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>
	</item>
		<item>
		<title>Attempting to boot Symbian^3 on the TMDSEVM3530 : Take 1</title>
		<link>http://vmlemon.wordpress.com/2011/07/31/symbian3-tmdsevm3530-initial-attempt/</link>
		<comments>http://vmlemon.wordpress.com/2011/07/31/symbian3-tmdsevm3530-initial-attempt/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 16:34:50 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[OMAP]]></category>
		<category><![CDATA[OMAP35x]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[Symbian^3]]></category>
		<category><![CDATA[Texas Instruments]]></category>
		<category><![CDATA[Wild Ducks]]></category>
		<category><![CDATA[Windows CE]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=750</guid>
		<description><![CDATA[Given that I&#8217;ve recently obtained a Texas Instruments TMDSEVM3530 development board (which is supposedly a cousin of the slightly-more-popular BeagleBoard, from what I can gather), thanks to Andrew Back (and DesignSpark), I thought that it&#8217;d be interesting to see if I could get Symbian^3 running on it. I&#8217;ve got another, more detailed post sitting in my [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=750&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Given that I&#8217;ve recently obtained a Texas Instruments <a href="http://focus.ti.com/docs/toolsw/folders/print/tmdsevm3530.html">TMDSEVM3530</a> development board (which is supposedly a cousin of the slightly-more-popular BeagleBoard, from what I can gather), thanks to <a href="http://twitter.com/#!/9600">Andrew Back</a> (and <a href="http://www.designspark.com">DesignSpark</a>), I thought that it&#8217;d be interesting to see if I could get Symbian^3 running on it.</p>
<p>I&#8217;ve got another, more detailed post sitting in my WordPress drafts, but I thought that I&#8217;d share some rough notes that I managed to salvage from an unsaved document, prior to yet another ATI driver-induced BSOD moment, in the meantime.</p>
<p><strong>Note:</strong> Everything mentioned here is the hypothetical product of &#8220;thinking out aloud&#8221;, and I can&#8217;t guarantee that anything mentioned here will actually work, or that your expensive development board won&#8217;t be reduced to a smouldering pile of rubble.</p>
<p>I also recommend obtaining a USB/RS-232 cable, if you haven&#8217;t either already got one, or you&#8217;re unfortunate enough to have a &#8220;modern&#8221;/&#8221;legacy-free&#8221; PC without RS-232 serial ports. Unfortunately, mine&#8217;s currently in Paris according to FedEx, so I&#8217;m working blindly for the moment.</p>
<p>It&#8217;s also probably a good idea to make either a copy of the individual files from the Windows CE demo SD card that ships with the board, or create a raw disk image of its sectors using WinImage, <code>dd</code> or a similar tool.</p>
<p>With that in mind:</p>
<ul>
<li>Download and unpack the <a href="http://dl.dropbox.com/u/2535596/ROM%20Images.zip"><code>ROM Images.zip</code></a> archive from DropBox</li>
<li>Rename or move the <code>NK.BIN</code> file in the root directory of the aforementioned SD card, so that it can be restored later</li>
<li>Copy either <code>beagle.rom.img</code> or <code>wildducks_demo.rom.img</code> from the <code>ROM Images</code> directory to the root directory of the card as <code>NK.BIN</code></li>
<li>Unmount the card and insert it into the board&#8217;s SD card slot</li>
<li>Attempt to boot the board&#8230;</li>
</ul>
<p>It&#8217;s probably also necessary to replace the <code>MLO</code> and/or <code>EBOOTSD.NB0</code> files with new ones, although I haven&#8217;t got around to figuring out what to replace them with, yet.</p>
<p>Inserting the card into the board&#8217;s SD Card slot will cause it to display a splash screen containing 4 coloured squares during the boot process &#8211; but seemingly causes it to do little else (unsurprisingly).</p>
<p>At this stage, if you rely on using the Windows CE card to test booting from SD, it&#8217;d be a good idea to reinstate the original <code>NK.BIN</code> file.</p>
<p>Another approach would be to obtain another SD card, use the shell script contained within the &#8220;<em><a href="http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_DevKit_1_0/exports/OMAP35X.tar.gz">OMAP35x EVM</a></em>&#8221; package from <a href="http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_DevKit_1_0/index_FDS.html">this page</a> to install Android on it, and then replace the <code>uImage</code> file (after backing it up) with one of the files from <code>ROM Images</code>.</p>
<p>However, doing so results in the board&#8217;s LCD being blank during boot.</p>
<p>The chances are that at this stage, you&#8217;ve either:</p>
<ul>
<li>Irreversibly damaged your board &#8211; unlikely, since booting the WinCE card works successfully</li>
<li>Got stuck in a bootloader loop somewhere &#8211; very likely, according to a wild guess</li>
<li>Successfully achieved a boot of the OMAP35x evaluation board using a ROM that obviously wasn&#8217;t intended for it &#8211; very unlikely</li>
</ul>
<p>If you&#8217;re unable to debug the board using one of its serial ports afterwards, then the most that you can do is either stare at 4 LEDs, or replace the <code>uImage</code> file with the original version and play with an unstable build of Android.</p>
<p>With a serial cable, and the board&#8217;s bootloader console, you could probably attempt to try a modified version of the <a href="http://www.symlab.org/wiki/index.php/Kernel:BeagleBoard_Quick_Start">Quick Start</a> instructions from the old Symbian Wiki.</p>
<p>If those don&#8217;t work, then attempting to load the ROM image at one of the memory locations mentioned in <a href="http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/TiOmap3530evm1.0.020080109ReleaseNotes?showDetails=true">this</a> QNX-related page, or at the <a href="http://sourceforge.net/apps/mediawiki/wildducks/index.php?title=Wild_ducks_project/Symbian#Use_a_pre-built_ROM">Wild Ducks</a> page might (if you&#8217;re lucky).</p>
<p>I&#8217;ll probably have another play, once my cable arrives&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/750/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/750/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/750/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=750&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/07/31/symbian3-tmdsevm3530-initial-attempt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>
	</item>
		<item>
		<title>Thoughts on Process Invocation with Qt and PoCo</title>
		<link>http://vmlemon.wordpress.com/2011/06/09/qt-poco-processes/</link>
		<comments>http://vmlemon.wordpress.com/2011/06/09/qt-poco-processes/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 16:57:36 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Boost]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MIME]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PoCo]]></category>
		<category><![CDATA[Process Invocation]]></category>
		<category><![CDATA[QProcess]]></category>
		<category><![CDATA[QString]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Stroma]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=696</guid>
		<description><![CDATA[Since late 2010, I&#8217;ve enjoyed developing C++-based applications with the Qt framework. Overall, I find it to be intuitive, fairly well-designed, and well-documented. However, one area of the framework that I&#8217;ve found unsatisfactory (or at least struggled with, despite my best efforts) is the QProcess class. Ideally, I&#8217;d like to be able to instantiate it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=696&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since late 2010, I&#8217;ve enjoyed developing C++-based applications with the <a href="http://qt.nokia.com">Qt framework</a>. Overall, I find it to be intuitive, fairly well-designed, and well-documented.</p>
<p>However, one area of the framework that I&#8217;ve found unsatisfactory (or at least struggled with, despite my best efforts) is the <a href="http://doc.qt.nokia.com/4.7/qprocess.html">QProcess</a> class. Ideally, I&#8217;d like to be able to instantiate it once, on a per-method (or per-class) basis with the appropriate executable path and CLI arguments, and then dump its output directly into a <a href="http://doc.qt.nokia.com/4.7/qstring.html">QString</a> for use elsewhere.</p>
<p>I vaguely recall successfully resolving ~90% of the problem in <a href="https://bitbucket.org/vmlemon/stroma/src/f0eedfc5e116/stroma.cpp">Stroma</a> (although that project&#8217;s architecture is currently rather monolithic) &#8211; but I never managed to solve the rest of it (actually dumping the output of the invoked process into a QString/multi-line text box widget).</p>
<p>After taking a break from that project for a while, I found myself encountering a similar problem in another project; and after reading various forum/<a href="http://lists.trolltech.com/qt-interest/2004-07/thread01066-0.html">mailing list</a> posts and pieces of documentation, sought to find alternative means of resolution.</p>
<p>The most promising initial candidate was <a href="http://www.netbsd.org/~jmmv/process/boost_process/usage.html">Boost::Process</a>, although it appears that development is still ongoing &#8211; therefore, it isn&#8217;t an &#8220;official&#8221; Boost component yet.</p>
<p>With that I mind, I decided to install and investigate <a href="http://pocoproject.org/docs/Poco.Process.html">Poco::Process</a>, after seeing a mention of it on <a href="http://stackoverflow.com/questions/3311737/c-cross-platform-for-processes-is-poco-lib-good-other-alternatives">StackOverflow</a>, last night.</p>
<p>Installation under Fedora was trivial (involved running &#8220;<span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">sudo yum -y install poco-devel poco-doc</span>&#8221; from a shell), and the appropriate header files were conveniently located in <span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;">/usr/include/Poco</span> for later perusal.</p>
<p>That said, I was sceptical about the quality and usability of the PoCo library itself, since the documentation and sample code felt relatively terse and incomplete; not to mention that guesswork (aided by <a href="http://stackoverflow.com/questions/2490804/how-to-link-poco-librarylibraries-to-our-program-in-unix-environment">this post</a>) was necessary, when it came to actually integrating it into the build system.</p>
<p>However, once those hurdles are dealt with, basic integration with the Qt project build system simply involves appending the following to the project file:</p>
<pre>#Headers for PoCo
HEADERS += /usr/include/Poco/Pipe.h /usr/include/Poco/Process.h \
/usr/include/Poco/PipeStream.h \
/usr/include/Poco/StreamCopier.h

#Libraries for PoCo
LIBS += -lPocoFoundation</pre>
<p>Once the project file is configured, adding the following to your class header file (modulo existing references, of course) should work :</p>
<pre>#include &lt;QApplication&gt;
#include &lt;QString&gt;
#include &lt;QDebug&gt;

#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;cstdio&gt;
#include &lt;iostream&gt;
#include &lt;Poco/Process.h&gt;
#include &lt;Poco/Pipe.h&gt;
#include &lt;Poco/PipeStream.h&gt;
#include &lt;Poco/StreamCopier.h&gt;

using namespace Poco;
using Poco::Process;
using Poco::Pipe;
using Poco::PipeInputStream;
using Poco::PipeOutputStream;
using Poco::ProcessHandle;</pre>
<p>Some of the aforementioned header files are unnecessary &#8211; although their presence doesn&#8217;t seem to cause any obvious problems at compilation or application execution time.</p>
<pre><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;">My method in question (a rather rudimentary/brute-force mechanism for returning the MIME type of a file as a QString object, based upon sample code from a <a href="http://pocoproject.org/slides/150-Processes.pdf">presentation</a> slide), looks like:</span><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;"> </span>
QString FileTypeHandler::GetMimeType(QString aFileName) {

    qDebug() &lt;&lt; "Inside FileTypeHandler::GetMimeType";
    qDebug() &lt;&lt; "Have text: " &lt;&lt; aFileName;

    std::string mimeCommand("/usr/bin/file");
    std::vector&lt;std::string&gt; mimeArgs;
    mimeArgs.push_back("-i");
    mimeArgs.push_back(aFileName.toStdString());
    Poco::Pipe mimeOutput;
    ProcessHandle mimeHandle = Process::launch(mimeCommand, mimeArgs, 0, &amp;mimeOutput, 0);
    Poco::PipeInputStream mimeInput(mimeOutput);

    std::string mimeData;

    mimeInput &gt;&gt; mimeData;

    qDebug() &lt;&lt; QString::fromStdString(mimeData);

    return QString::fromStdString(mimeData);

}</pre>
<p>Theoretically/in essence, it accepts a file name as its argument, invokes the <code>file -i</code> command to (hopefully) look up its MIME type, stores it in a standard ANSI C++ string, and finally returns it as a QString for consumption by UI widgets.</p>
<p>In reality, it pretty much does just that &#8211; with the caveat that it doesn&#8217;t quite return the correct output. (It returns &#8221;<code>/dev/null:</code>&#8221; instead of &#8220;<code>/dev/null: application/x-character-device; charset=binary</code>&#8220;, for example).</p>
<p>Still, I hope that these notes are useful for others who are facing the same problem&#8230;</p>
<p>Maybe others can chime in with a better alternative, or other suggestions?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/696/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/696/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/696/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/696/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/696/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/696/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/696/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=696&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/06/09/qt-poco-processes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>
	</item>
		<item>
		<title>Contributing an AT Commands Dissector to Wireshark</title>
		<link>http://vmlemon.wordpress.com/2011/05/11/contributing-an-at-commands-dissector-to-wireshark/</link>
		<comments>http://vmlemon.wordpress.com/2011/05/11/contributing-an-at-commands-dissector-to-wireshark/#comments</comments>
		<pubDate>Wed, 11 May 2011 17:11:07 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[AT Commands]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[ISI]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PhoNet]]></category>
		<category><![CDATA[Project Iris]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tinkering]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[Wireshark]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=677</guid>
		<description><![CDATA[Whilst working on enhancing the Wireshark ISI dissector to add support for the USB encapsulation thereof, and a number of new resource dissectors, I felt that it would be useful to cleave off a generic dissector framework based upon the main packet-isi.c source file. Whilst I never actually committed and released that generic code, I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=677&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Whilst working on enhancing the <a href="https://bitbucket.org/vmlemon/usb_isi_dissector_for_wireshark">Wireshark ISI dissector</a> to add support for the USB encapsulation thereof, and a number of new resource dissectors, I felt that it would be useful to cleave off a generic dissector framework based upon the main <code>packet-isi.c</code> source file.</p>
<p>Whilst I never actually committed and released that generic code, I decided to hack up an <a href="https://bitbucket.org/vmlemon/usb_isi_dissector_for_wireshark/src/8628fa699c7a/at-hayes/">AT commands dissector</a> plug-in based upon it (plus some quick-and-dirty hacks to the main <code>Makefile</code>), and left it alongside the ISI dissection code in my BitBucket repository for a while&#8230;</p>
<p>That code was mostly written &#8220;in anger&#8221;, as a means of identifying and filtering out the uninteresting AT commands traffic from other, more interesting stuff; and it generally served its purpose well &#8211; although it was extremely rudimentary (due to unfamiliarity with certain APIs and uncertainty over the best way to handle strings of an unknown length).</p>
<p>For example:</p>
<ul>
<li>The initial version didn&#8217;t support displaying commands text in Wireshark&#8217;s &#8220;Info&#8221; column.</li>
<li>Because I only had access to trace files containing AT commands packets where the text was wrapped in <code><acronym title="Carriage Return, Line Feed (Newline)">CRLF</acronym></code> bytes, the initial heuristics used to detect these packets were rather weak.</li>
</ul>
<p>Still, despite those limitations, I <a href="http://www.wireshark.org/lists/wireshark-dev/201104/msg00302.html">signalled my intentions</a> on the 26th of April to contribute the aforementioned dissector on the Wireshark developers&#8217; mailing list; and two days later, I decided to file <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5868">Bug #5868</a>.</p>
<p>Shortly afterwards, Chris Maynard <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5868#c6">chimed in</a> with some suggestions on ways of improving the code &#8211; which I implemented over the course of a few hours; and I ended up submitting copies of my modified versions of various source files that the new dissector relied upon.</p>
<div>
<p>On the 5th of May, I managed to stumble upon a trace file containing an AT commands packet sans the <code>CRLF </code>encapsulation &#8211; and before I could even finish addressing the suggestions that were made earlier, Chris stormed ahead and delivered an enhanced version of the dissector, a few hours later.</p>
<p>As a prerequisite, an updated version of the the patch from <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4814">Bug #4814</a> (which implements support for dissection of USB-encapsulated MPEG-2 Transport Stream packets, and generic infrastructure for USB Bulk URB heuristics support) was finally committed.</p>
<p>Not too long afterwards, Chris checked in his modified version of the dissector (in SVN revision <a href="http://anonsvn.wireshark.org/viewvc?view=revision&amp;revision=37045">37045</a>, and slightly updated in <a href="http://anonsvn.wireshark.org/viewvc?view=revision&amp;revision=37046">37046</a>) &#8211; which meant that my first ever upstream submission to Wireshark was complete. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>(As an aside, some <a href="http://anonsvn.wireshark.org/viewvc/trunk/epan/dissectors/packet-usb-at.c?view=log">additional fixes</a> have been performed; and the old <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4819">Ethernet CDC</a> dissector was finally committed last night).</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/677/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/677/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/677/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/677/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/677/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/677/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/677/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/677/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=677&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/05/11/contributing-an-at-commands-dissector-to-wireshark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>
	</item>
		<item>
		<title>Here We Go Again</title>
		<link>http://vmlemon.wordpress.com/2011/01/13/here-we-go-again/</link>
		<comments>http://vmlemon.wordpress.com/2011/01/13/here-we-go-again/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 02:38:52 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[Bradford]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Introspection]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Observations]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Project Iris]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[University]]></category>
		<category><![CDATA[Wireshark]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=494</guid>
		<description><![CDATA[As I compose this post, I realise that I&#8217;m extremely fortunate to have made it this far through life &#8211; especially when considering others living in developing countries, for instance. After all &#8211; although I haven&#8217;t got the support of a wealthy, stable family, I&#8217;ve still got: Food and potable drinking water Heating, electricity and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=494&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As I compose this post, I realise that I&#8217;m extremely fortunate to have made it this far through life &#8211; especially when considering others living in developing countries, for instance.</p>
<p>After all &#8211; although I haven&#8217;t got the support of a wealthy, stable family, I&#8217;ve still got:</p>
<ul>
<li>Food and potable drinking water</li>
<li>Heating, electricity and other necessities</li>
<li> A dry roof over my head</li>
<li>Broadband Internet connectivity</li>
<li>Good friends, and a handful of family members who mean well &#8211; even if I don&#8217;t always agree with them</li>
</ul>
<p>In just over 6 months from now, I&#8217;ll have reached the 2 decades old milestone &#8211; which is somewhat worrying to contemplate; although I&#8217;m cautiously excited about future possibilities.</p>
<p>With that in mind, I&#8217;d like to reflect on the happenings of 2010, and the beginning of 2011.</p>
<p>In many aspects, 2010 was just another unspectacular, run-of-the-mill year &#8211; a monotonic continuation of 2009, to be blunt; although it brought change and progress in many ways.</p>
<p><strong>However&#8230;</strong></p>
<p>From a positive perspective, it was a good year for academia, software development, travelling, and personal relationships, amongst other things.</p>
<ul>
<li>I was able to <a href="http://vmlemon.wordpress.com/2010/08/23/a-quick-update/">return to London</a>, shortly after my 19th birthday in order to spend some time volunteering at the Symbian Foundation &#8211; details of what I did are available as part of my <a href="http://uk.linkedin.com/in/tysonkey">LinkedIn profile</a>.</li>
<li>I received a number of references from several people, which were fairly useful (thanks!)</li>
<li>I finally managed to obtain a part-time, intensive placement on a 4-5 year long Computer Science course at the <a href="http://scim.brad.ac.uk/">University of Bradford</a> &#8211; and completed my first semester, shortly before Christmas 2010.</li>
<li>I learned the fundamentals of Java, and managed to write a number of C++-based applications using Qt &#8211; some of which I published the source code for on <a href="http://bitbucket.org/vmlemon">BitBucket</a>.</li>
<li>Towards the end of 2010, I <a href="http://vmlemon.wordpress.com/2010/12/25/wireshark-usb-phonet-dissector/">released</a> a modified version of Sebastian Reichel&#8217;s <a href="https://git.ring0.de/isi-wireshark-plugin/">ISI dissector</a> for Wireshark with support for USB-encapsulated packets. I have since refactored the USB handling code and integrated it into the main dissector, in addition to writing new dissectors for the SIM, GSM Stack Server and Supplementary Services resources; and worked with Sebastian on incorporating these changes into his version successfully.</li>
<li>I also managed to reconnect with several people whom I haven&#8217;t heard from in a while.</li>
</ul>
<p><strong>But&#8230;</strong></p>
<p>From a negative perspective, it was a bad year for older personal projects, family and financial-related issues, injuries, and the Symbian Foundation.</p>
<ul>
<li>The server hosting DNS records for one of my domains (house404.co.uk) and Web services for several projects, which <a href="http://twitter.com/#!/dazjorz">Sjors Gielen</a> generously provided access to for several years finally succumbed to hardware failure &#8211; so I&#8217;ve lost some old data, some of which was of dubious utility, and some of which was fairly useful.</li>
<li>In November, I was unfortunate enough to have been involved in a hit-and-run traffic accident, whilst returning home from the supermarket in Boroughbridge. Thankfully, I sustained only minor injuries (from which I later fully recovered); although the suspect was never identified, after filing a police report.</li>
<li>In December, as a result of the harsh realities of the current economic climate, and decisions from handset manufacturers to slowly withdraw from the Symbian Foundation, the decision was made to effectively cease operations &#8211; which left community members such as myself to <a href="http://vmlemon.wordpress.com/2010/11/29/lighting-the-mines/">pick up the pieces</a>.</li>
</ul>
<p>I remain pessimistically hopeful that things improve in 2011.</p>
<p>Thanks to everyone who&#8217;s helped in various ways; provided advice and interesting discussion points; and otherwise persisted with me so far.</p>
<p>Hopefully, I&#8217;ve been useful to others in some way, too &#8211; and I&#8217;m glad, if that&#8217;s the case.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/494/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/494/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/494/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/494/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/494/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/494/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/494/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/494/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=494&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2011/01/13/here-we-go-again/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>
	</item>
		<item>
		<title>An ISI/PhoNet-over-USB dissector for Wireshark</title>
		<link>http://vmlemon.wordpress.com/2010/12/25/wireshark-usb-phonet-dissector/</link>
		<comments>http://vmlemon.wordpress.com/2010/12/25/wireshark-usb-phonet-dissector/#comments</comments>
		<pubDate>Sat, 25 Dec 2010 11:35:26 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[ISI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[OFono]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PhoNet]]></category>
		<category><![CDATA[Project Iris]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[Tinkering]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[Wireshark]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=438</guid>
		<description><![CDATA[Whilst working on Project Iris, I have found Sebastian Reichel&#8216;s Wireshark dissector plug-in invaluable for identifying the content of ISI packets generated by my handset. However, it relies upon the ability to use the Linux PhoNet stack &#8211; which isn&#8217;t always possible under certain circumstances. For example, the stack may not be available at all under [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=438&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Whilst working on Project Iris, I have found <a href="https://ring0.de/">Sebastian Reichel</a>&#8216;s Wireshark <a href="https://elektranox.org/n900/libisi/index.html">dissector plug-in</a> invaluable for identifying the content of ISI packets generated by my handset.</p>
<p>However, it relies upon the ability to use the Linux PhoNet stack &#8211; which isn&#8217;t always possible under certain circumstances.</p>
<p>For example, the stack may not be available at all under the running Linux kernel version; or the USB device generating ISI traffic may be connected to a virtual machine running a Windows-based application &#8211; which is obviously invisible to the host&#8217;s network stack.</p>
<p>With that in mind, I&#8217;ve decided to release a modified version of the aforementioned plug-in on <a href="https://bitbucket.org/vmlemon/usb_isi_dissector_for_wireshark">BitBucket</a> (in source code form only, at present), and I&#8217;ve uploaded a sample trace file to test it against, <a href="http://code.google.com/p/understand/downloads/detail?name=Nokia_N73_ISI_Test.cap">here</a>.</p>
<p>Rough instructions for building it against an SVN release version of Wireshark under Fedora are provided in the repository; as are a copy of my colouring rules for working with USB and ISI traffic.</p>
<p>At present, the dissector has the following features:</p>
<ul>
<li>Basic support for dissection of ISI/PhoNet packets encapsulated in USB framing (AKA &#8220;CDC PhoNet&#8221;) &#8211; for USB <code>CDC_DATA </code>class packets</li>
<li>Basic support for dissecting ISI GPS and SIM Authentication packets (inherited from the original version of the dissector)</li>
<li>Basic support for identifying specific types of <code>CDC_DATA</code> packets (works for ISI, PPP and AT/Hayes commands)</li>
</ul>
<p>However, there are also a number of limitations and bugs &#8211; especially when compared to the original version:</p>
<ul>
<li>ISI packets encapsulated in Linux Cooked framing are currently unsupported</li>
<li>Due to lack of heuristics, this dissector will override the PPP dissector (and the <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4814">ISO/IEC 13818-1</a> dissector) when working with USB trace files</li>
<li>The length indicator may not always be accurate &#8211; although a lot of effort was spent on attempting to make it work</li>
</ul>
<p>When working with this dissector, I recommend either using the <code>isi.usbtype == 0x1b</code> display filter, or individually filtering out various other types of USB packets, in order to avoid confusion.</p>
<p>For curious folks, a screenshot of the dissector in action is provided:</p>
<p><a href="http://vmlemon.files.wordpress.com/2010/12/isi-dissector-updates.png"><img class="aligncenter size-full wp-image-473" title="Updated ISI/USB Dissector" src="http://vmlemon.files.wordpress.com/2010/12/isi-dissector-updates.png?w=450&#038;h=228" alt="" width="450" height="228" /></a></p>
<p>I hope that others find this useful for something.</p>
<p>That aside, I&#8217;d like to thank the following:</p>
<ul>
<li>Chris Maynard for his USB patches (especially the <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4819">CDC Ethernet one</a>), which were useful for figuring out how to integrate with the USB dissector</li>
<li>Sebastian for providing the initial version of the dissector</li>
<li>William Roberts for providing the Nokia N73 that&#8217;s serving me well as my primary handset (and its USB cable, of course), and for persisting with me whilst I grappled with various stupid mistakes during learning C and C++</li>
</ul>
<p>I wish readers a happy Christmas, and all of the best for 2011! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/438/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=438&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2010/12/25/wireshark-usb-phonet-dissector/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>

		<media:content url="http://vmlemon.files.wordpress.com/2010/12/isi-dissector-updates.png" medium="image">
			<media:title type="html">Updated ISI/USB Dissector</media:title>
		</media:content>
	</item>
		<item>
		<title>Lighting the Mines</title>
		<link>http://vmlemon.wordpress.com/2010/11/29/lighting-the-mines/</link>
		<comments>http://vmlemon.wordpress.com/2010/11/29/lighting-the-mines/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 17:12:54 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Google Code]]></category>
		<category><![CDATA[Incubation Projects]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[Symbian Platform]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=412</guid>
		<description><![CDATA[With the recent news of the Symbian Foundation board of directors deciding to gradually reduce the scope of the organisation to that of a mere licensing body, and talk of the community Websites closing imminently, there has understandably been somewhat of an uproar within this small-yet-vocal community. A case in point being a post and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=412&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>With the <a href="http://www.symbian.org/news-and-media/2010/11/08/symbian-foundation-transition-licensing-operation">recent news</a> of the Symbian Foundation board of directors deciding to gradually reduce the scope of the organisation to that of a mere licensing body, and talk of the community Websites closing <a href="http://developer.symbian.org/wiki/Symbian_Foundation_web_sites_to_shut_down">imminently</a>, there has understandably been somewhat of an uproar within this small-yet-vocal community.</p>
<p>A case in point being a <a href="http://jfourgeaud.wordpress.com/2010/11/27/symbian-as-an-open-source-platform-to-be-shut-down-help">post and poll</a> from Julien Fourgeaud on his blog, which spawned <a href="http://groups.google.com/group/symbian-devco/browse_thread/thread/375f23fed1a54596">this</a> frantic discussion on the <a href="http://www.symbiandevco.org">DevCo</a> mailing list.</p>
<p>Despite reassurances of plans to make content available to the public (including mailing list posts if desired, from what I&#8217;ve been told), there&#8217;s still a great deal of uncertainty over what the future holds for not only the codebase and supporting resources, but for the incredible community that has coalesced around it over the past 2 years or so.</p>
<p>Because I consider the Symbian Platform codebase to be a rich, valuable resource for learning from and working with; and believe that it deserves to be publicly accessible in some way for both current developers, and for future generations, I have taken an interim step to preserve a large subset of it.</p>
<p>Over the past few days, I&#8217;ve started a <a href="http://code.google.com/p/symbian-incubation-projects/">Google Code project</a> that initially aimed to preserve the &#8220;<a href="http://developer.symbian.org/wiki/Innovation_Process">incubation project</a>&#8221; repositories primarily, as they were the most vulnerable due to being transient in nature; although it now also hosts copies of the Kernel &amp; Hardware Services, and Classic UI <acronym title="Feature Code Line">FCL</acronym> repositories.</p>
<p>There&#8217;s obviously no point in listing every single repository here, although the majority of the &#8220;incubation project&#8221; ones should be covered; and I&#8217;ve also provided copies of various licensing documents for future reference.</p>
<p>With that in mind, I&#8217;ve kept things open-ended &#8211; because I don&#8217;t know how others will want to use these resources.</p>
<p>If others feel like working within the repositories and using the project&#8217;s wiki and issue tracker resources, I&#8217;m happy to open them up.</p>
<p>Of course, if others feel like downloading or cloning the repositories to fork them, I won&#8217;t complain &#8211; after all, it means that the codebase continues to spread in a healthy manner!</p>
<p>If there&#8217;s interest, I&#8217;m also willing to work with the Symbian Foundation team on a transition/temporary migration plan, whilst the situation with Nokia is resolved.</p>
<p>All aside, I hope that others enjoy using these resources as much as I did making them available; and I wish everyone involved during these difficult times the best of luck! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/412/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/412/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/412/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/412/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/412/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/412/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/412/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/412/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=412&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2010/11/29/lighting-the-mines/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>
	</item>
		<item>
		<title>Project Iris: Affordable, Instant Connectivity for Syborg/QEMU</title>
		<link>http://vmlemon.wordpress.com/2010/11/01/the-iris-project/</link>
		<comments>http://vmlemon.wordpress.com/2010/11/01/the-iris-project/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 22:07:16 +0000</pubDate>
		<dc:creator>Tyson Key</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[ISI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PhoNet]]></category>
		<category><![CDATA[Project Iris]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symbian]]></category>
		<category><![CDATA[Tinkering]]></category>

		<guid isPermaLink="false">http://vmlemon.wordpress.com/?p=349</guid>
		<description><![CDATA[Apologies for not updating here as often as I wanted &#8211; although in order to keep things concise, I won&#8217;t detail the reasons for my hiatus in this post. That aside, whilst I can remember the details, I&#8217;d like to share a proposal for a novel (in my humble opinion &#8211; but I&#8217;m prepared to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=349&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Apologies for not updating here as often as I wanted &#8211; although in order to keep things concise, I won&#8217;t detail the reasons for my hiatus in this post.</p>
<p>That aside, whilst I can remember the details, I&#8217;d like to share a proposal for a novel (in my humble opinion &#8211; but I&#8217;m prepared to be corrected) method of potentially using unmodified, off-the-shelf Nokia handsets as a modem under Symbian OS running on QEMU.</p>
<p>Please note that I have so far been unable to implement this, or test certain individual components (e.g. the <a href="http://www.mjmwired.net/kernel/Documentation/networking/phonet.txt">Linux PhoNet stack</a>); although I believe from the research that I&#8217;ve done that individual components should work in isolation.</p>
<p>Additionally, this isn&#8217;t intended to be a competitor to the excellent <a href="http://developer.symbian.org/wiki/Wild_ducks_project">Wild Ducks project</a>, or the ad-hoc efforts surrounding getting regular modems utilising Hayes/AT commands to work, either. (It&#8217;s for folks who for whatever reason either can&#8217;t afford to acquire a fully fledged Wild Ducks set-up, don&#8217;t want to commit themselves for the long-term, or just want a quick-&#8217;n'-dirty way to test stuff that requires network connectivity).</p>
<p style="text-align:left;">With that in mind, I&#8217;ll introduce the architecture diagram, and hopefully try to provide further details &#8211; because a picture is apparently worth a thousand words:</p>
<p style="text-align:left;"><a href="http://vmlemon.files.wordpress.com/2010/11/irisarchitecturediagram.png"><img class="aligncenter size-full wp-image-368" title="Iris Architecture Diagram" src="http://vmlemon.files.wordpress.com/2010/11/irisarchitecturediagrammini.png?w=450&#038;h=259" alt="Click to view full size" width="450" height="259" /></a></p>
<p style="text-align:left;">The system itself consists of the following components, in no specific order:</p>
<ul>
<li>A <a href="http://developer.symbian.org/wiki/Syborg_%26_QEMU">version of QEMU</a> with customisations specific to the Symbian Platform, as detailed in my <a href="http://blog.symbian.org/2009/11/20/an-introduction-to-the-symbian-virtual-platform/">ancient post</a> on the Symbian Blog &#8211; and a few others, since then!</li>
<li>Two brand new components, which will be described in further detail later (the<em> TI SSI bus &#8220;pseudo-modem&#8221;</em> and the<em> raw PhoNet-to-SSI bridge</em>)</li>
<li>The Linux PhoNet protocol stack, which was contributed to the mainline Linux kernel by Nokia on behalf of members of what was once known as the &#8220;Maemo Computers&#8221; department (if memory serves correct)</li>
<li>Your favourite Nokia device, providing that it supports USB connectivity and the &#8220;PC Suite&#8221; profile &#8211; since that&#8217;s how we can access certain baseband services via PhoNet! (A well-kept secret, so it seems)&#8230;</li>
<li>The Symbian Platform (which consists of the Symbian OS, UI framework, middleware and other components) and the baseport &#8211; Syborg, in the case of Project Iris</li>
<li>Nokia&#8217;s <a href="http://developer.symbian.org/oss/FCL/sf/incubator/modemadaptation/file/8486d82aef45/adaptationlayer/tsy/nokiatsy_dll">baseband &#8220;TSY&#8221;</a> (telephony support plug-in), which should work in conjunction with a well-designed <em>TI SSI bus &#8220;pseudo-modem&#8221;</em> and the<em> raw PhoNet-to-SSI bridge</em> to simulate the presence of a real Nokia baseband by proxy <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>The most interesting components are the <em>TI SSI bus &#8220;pseudo-modem&#8221;</em> and the<em> raw PhoNet-to-SSI bridge</em>, which are pivotal to making this thing work.<em></em></p>
<p>The <em>raw PhoNet-to-SSI bridge</em> can potentially either be integrated into QEMU, or left standalone -  although designing the IPC mechanism for the latter use-case is left as an exercise for the reader.</p>
<p>Communication with the device could occur via either a <code>/dev/phonet0</code> device node (if such a thing existed, but according to <a href="http://ibot.rikers.org/%23maemo/20100211.html.gz">this IRC log</a>, it seems that it doesn&#8217;t under certain circumstances), or directly bound low-level datagram/pipe sockets to communicate with the user&#8217;s handset via raw PhoNet/ISI packets encapsulated in USB frames.</p>
<p>Obviously, the <em>raw PhoNet-to-SSI bridge</em> will encapsulate and decapsulate PhoNet packets that are transmitted/received by the handset into Texas Instruments-proprietary SSI frames for consumption by the <em>&#8220;pseudo-modem&#8221;.</em></p>
<p>The <em>&#8220;pseudo-modem&#8221;</em> works in conjunction with the Nokia TSY (as mentioned earlier) and the <em>raw PhoNet-to-SSI bridge</em>; and will be a brand new, integral component of QEMU. It has minimal state of its own; and other than creating the illusion of a genuine Nokia/TI modem&#8217;s presence, it serves solely to transport packets between the bridge and the TSY.</p>
<p>Finally, the interaction between the TSY, network and telephony stacks and other parts of Symbian OS are extensively documented elsewhere.</p>
<p>For those curious about the title, the &#8220;instant&#8221; bit refers to the fact that as of recent versions of the Linux kernel and NetLink stuff, things should Just Work™ when a PhoNet device is connected (according to <a href="http://lwn.net/Articles/342908/">this page</a> and <a href="http://www.remlab.net/op/maemo2009.pdf">this presentation</a> from 2009), and that limited hardware knowledge is necessary to use one &#8211; just plug it in and switch it on.</p>
<p>The &#8220;affordable&#8221; bit refers to the fact that Nokia devices are relatively low-cost, easy to obtain, and plentiful (unlike specialist hardware such as the BeagleBoard and standalone GSM modems &#8211; as great as they are, for example).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vmlemon.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vmlemon.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vmlemon.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vmlemon.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vmlemon.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vmlemon.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vmlemon.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vmlemon.wordpress.com/349/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vmlemon.wordpress.com&amp;blog=12000006&amp;post=349&amp;subd=vmlemon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vmlemon.wordpress.com/2010/11/01/the-iris-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8cbe29115018dc1626527d9a1a53207c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vmlemon</media:title>
		</media:content>

		<media:content url="http://vmlemon.files.wordpress.com/2010/11/irisarchitecturediagrammini.png" medium="image">
			<media:title type="html">Iris Architecture Diagram</media:title>
		</media:content>
	</item>
	</channel>
</rss>
