<?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/"
	>

<channel>
	<title>Switch Systems Blog</title>
	<atom:link href="http://blog.switchsystems.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.switchsystems.co.uk</link>
	<description>Exeter IT support and software development</description>
	<lastBuildDate>Fri, 13 Apr 2012 12:03:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Stanton SCS.4DJ &#8211; Under the hood</title>
		<link>http://blog.switchsystems.co.uk/2012/04/stanton-scs-4dj-under-the-hood/</link>
		<comments>http://blog.switchsystems.co.uk/2012/04/stanton-scs-4dj-under-the-hood/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 09:09:58 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=659</guid>
		<description><![CDATA[Kris takes apart the Stanton SCS.4DJ]]></description>
			<content:encoded><![CDATA[Kris takes apart the stanton SCS.4DJ&#8230; <span id="more-659"></span>
Last update: 11:00 BST Friday 13th April 2012.<br/>
<style>
pre { color:#ffcf00 ; }
dl dt {
	clear: left;
	font-weight: bold;
	font-size:110%;
}
dl dd {
	clear: left;
	margin-bottom: 10px;
}
ul.filesys {
	background: #eee;
	border: 1px solid #fff;
	padding: 2px 2px 2px 20px;
	color: #000;
}
ul.filesys li {
	color: #000 !important;
}
</style>
<style type="text/css">
pre.code {
	font-family: 'Courier New';
	font-size: 8pt;
	color: #000000;
	background: #eee;
	padding: 2px 3px 2px 5px;
}

.sc0 {

}

.sc2 {
	color: #008000;
}

.sc3 {
	color: #FF0000;
}

.sc4 {
	font-weight: bold;
	color: #0000FF;
}

.sc5 {
	color: #808080;
}

.sc6 {
	color: #808080;
}

.sc7 {
	font-weight: bold;
	color: #804000;
}

.sc8 {

}

.sc9 {
	font-weight: bold;
	color: #FF8040;
	background: #FFFFD9;
}

.sc10 {
	color: #008080;
	background: #00FFFF;
}

.sc11 {
	font-weight: bold;
	color: #804040;
	background: #E1FFF3;
}
</style>
<p>
	I&#8217;ve had a Stanton <a
		href="http://www.stantondj.com/stanton-controllers-systems/scs4dj.html#">SCS.4DJ</a>
	unit for a few months now, and thorougly enjoy using it. However, there
	are a <a href="http://forum.gibson.com/index.php?/forum/122-scs4-devices/">community of users</a> who want to get their hands on the
	OS/application so we can help to improve it.
</p>
<p>What follows is a collection of notes from my initial reserach into the device. Much of it isn&#8217;t complete, I need to spend more time doing in-depth analysis but that&#8217;s a hard task fitting it within my day job.
Hopefully this is a good enough start that it picks up some interest from the community (or maybe even Stanton/Gibson themselves).
</p>
<div style="background:#333; color:#fff; padding:5px; border-radius:5px;"><strong>Quick Ref:</strong><br/>
Device update files : <a
		href="http://www.stantondj.com/pdf/products/controllers/scs4dj/SCS4%202_1-update-and-changelog.zip">[link to download]</a><br/>
Device <a href="#shell">shell access</a>: <a href="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/root.zip">[extract this file to your USB drive]</a>
</div>
<h2>Lets start with QuickGrid:</h2>

<p>QuickGrid is a PC based analysis program which analyses BPMs and
	generates the waveform display that is used on the unit. The SCS.4DJ
	can do it itself, but doing it on a PC is much faster. Lets see what
	it&#8217;s doing:</p>

<h3>Analysis</h3>
<p>Well, it&#8217;s a Java App with a couple of dependencies, namely
	djanalyze.exe. Running it manually gives:</p>
<pre>
C:\Program Files (x86)\Stanton>djanalyze.exe --help
usage: djanalyze audioFileName rootFolder songId [userBPM] [userBPMMode]
						or
			djanalyze --version
						or
			djanalyze --supports-hash
						or
			djanalyze --error-code
						or
			djanalyze --help

example: djanalyze "e:\audio.mp3" "e:" "FE66E7B1E7D1C4B8AAA2FD5BB8B71A39"
</pre>
<p>So the app must be generating the hash (<del datetime="2012-04-11T16:41:02+00:00">which we assume to be an
	MD5 because it&#8217;s 32 characters long, though it&#8217;s not a plain md5 so it
	must be salted somehow</del> It IS an md5 hash of the file!), analysing the mp3, then storing the results.
	So how does it store this data?</p>

<h3>On-USB-Device filesystem:</h3>
<ul>
	<li>SCS.4DJ_Database
		<ul>
			<li>analysis
				<ul>
					<li>{two-chars}/{hash}.sar</li>
					<li>{two-chars}/{hash}.sek</li>
					<li>{two-chars}/{hash}.wfv</li>
				</ul>
			</li>
			<li>db_reserved_space</li>
			<li>Stanton_DJ_DB.db</li>
		</ul>
	</li>
</ul>
<p>
	The most interesting file is of course, Stanton_DJ_DB.db. This is an
	SQLite database, and there&#8217;s a nifty extension for Firefox called &#8216;<a
		target="_blank" href="http://code.google.com/p/sqlite-manager/">SQLite
		Manager</a>&#8216;. Opening this file gives us 5 database tables:
</p>
<ul>
	<li>Device</li>
	<li>Playlists</li>
	<li>SongAnalysis</li>
	<li>Songs</li>
	<li>Vieos</li>
</ul>
<a
	href="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/image1.jpg"><img
	src="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/image1.jpg"
	alt="" title="image1" style="width:100%; margin:5px 0px;" /></a>
<p>So if you ever wanted to find all the 87 BPM tracks and double
	them to 174, all it takes is a single SQL query (maybe someone will
	write a utility that can quickly do this&#8230;)</p>
<h2>And now on the SCS.4DJ itself:</h2>
<p>Normally to work this out we&#8217;d have to take apart the unit, but
	not wanting to void my warranty, we&#8217;re stuck with the hard way&#8230;. or
	maybe not so hard: Stanton have given us a firmware update file we can
	take apart!</p>
<p>
	Extracting the zip file at <a
		href="http://www.stantondj.com/pdf/products/controllers/scs4dj/SCS4%202_1-update-and-changelog.zip">http://www.stantondj.com/pdf/products/controllers/scs4dj/SCS4%202_1-update-and-changelog.zip</a>
	gives us
</p>
<ul>
	<li>SC-IX Update Instructions_Changelog.pdf</li>
	<li>SCS.4DJ_OSv2.1_2011-12-02.update</li>
</ul>
<p>Looking at the .update file header, we can see that it&#8217;s a
	.tar.gz file, so extracting all of the contents of that gives us
	something that looks like:</p>

<ul class="filesys">
	<li>ColdfireUpdateAction
		<ul>
			<li>MR1.0.1_SCS4DJ_CF4.11_7_15.cfupdate</li>
			<li>update-coldfire (ELF file)</li>
		</ul>
	</li>
	<li>DeleteSelfAction</li>
	<li>DjappUpdateAction
		<ul>
			<li>home/jars/workspace
				<ul>
					<li>app</li>
					<li>djanalyze</li>
					<li>midi_controller</li>
				</ul>
			</li>
		</ul>
	</li>
	<li>KernelUpdateAction
		<ul>
			<li>zImage</li>
		</ul>
	</li>
	<li>PrerequisiteCheckAction</li>
	<li>RootfsUpdateAction
		<ul>
			<li>boot &#8230;</li>
			<li>etc &#8230;</li>
			<li>lib &#8230;</li>
			<li>root &#8230;</li>
			<li>tmp &#8230;</li>
			<li>usr &#8230;</li>
		</ul>
	</li>
	<li>Scripts
		<ul>
			<li>01-PrerequisiteCheckAction.sh</li>
			<li>02-RootfsUpdateAction.sh</li>
			<li>03-KernelUpdateAction.sh</li>
			<li>04-DjappUpdateAction.sh</li>
			<li>05-ColdfireUpdateAction.sh</li>
			<li>06-DeleteSelfAction.sh</li>
		</ul>
	</li>
	<li>UpdateHelpers
		<ul>
			<li>fbsplash.ini</li>
			<li>progress</li>
			<li>scs4_progress.ppm.bz2</li>
		</ul>
	</li>
	<li>Update</li>
</ul>
<p>Some interesting files there, most notably the stuff in
	RootFsUpdateAction. Here&#8217;s what i&#8217;ve found out:</p>

<dl>
	<dt>Modifying the scripts may void your warranty!<dt>
	<dd>Lots of files have a header similar to this:
	<pre>
	#!/bin/sh
	# SCS.4DJ_OSv2.1_rc1_2011-12-02.update
	# Copyright Stanton Magnetics Inc.  All rights reserved.
	# Modifying any component of this file may void your warranty.
	# This script is automatically generated.  Do not update it manually.
	</pre>
	</dd>
	<dt>
		<strong>ColdFire</strong> &#8211; the name of the chipset used.
	</dt>
	<dd>
		It&#8217;s a RISC based 32bit processor, and CF4 denotes that it&#8217;s a <a
			href="http://www.ip-extreme.com/IP/coldfire_v4.shtml">v4 coldfire
			processor</a> (which is bad news for those of us who wish for a faster
		processor!). Looks like build tools are available at <a href="http://www.freescale.com/webapp/sps/site/homepage.jsp?code=CW_HOME">freescale</a> (go for the &#8220;Special Suite (Free Trial)&#8221; under codewarrior suites, and get the ColdFire bundle)
	</dd>
	<dt>RootfsUpdateAction</dt>
	<dd>Looks like a unix style file system! I&#8217;m gonna say BSD
		based&#8230;</dd>
	<dt>ELF executable files</dt>
	<dd>
		<a href="http://en.wikipedia.org/wiki/Executable_and_Linkable_Format">ELF</a>
		format files are used for executables
	</dd>
	<dt>There is a USB Ethernet adapter configured on this device</dt>
	<dd>
		RootfsUpdateAction.tar\etc\udev\rules.d\68-drivers-net.rules shows us
		that the <a
			href="http://www.trendnet.com/products/proddetail.asp?prod=135_TU-ET100C&#038;cat=42">Trendnet
			USB Ethernet TUET100C</a> has drivers loaded. Which is useful for the
		next part:
	</dd>
	<dt>SSHD is available, but not configured</dt>
	<dd>The files are there, but sshd.conf is not setup.</dd>
	<dt>SFTP is available</dt>
	<dd>sftp-server is located in RootfsUpdateAction.tar\usr\libexec</dd>
	<dt>RootfsUpdateAction.tar\lib\modules\2.6.31.12-rt21-ivl-00001-ga75aeaa
		is a folder</dt>
	<dd>2.6.31.12-rt21 is a linux release, ivl is the manufacturer,
		not sure what the rest means.</dd>
</dl>
<h2>SCS.4DJ startup shell script</h2>
<pre class="code">
<span class="sc2">#!/bin/sh</span><span class="sc0">

</span><span class="sc2"># Set time from hardware clock</span><span class="sc0">
</span><span class="sc8">hwclock</span><span class="sc0"> </span><span
		class="sc7">--</span><span class="sc8">hctosys</span><span class="sc0">

</span><span class="sc2"># Don't shut off screen</span><span class="sc0">
</span><span class="sc4">echo</span><span class="sc0"> </span><span class="sc8">-e</span><span
		class="sc0"> </span><span class="sc8">-n</span><span class="sc0"> </span><span
		class="sc6">'\033[9]'</span><span class="sc0"> </span><span
		class="sc7">&gt;</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">dev</span><span class="sc7">/</span><span class="sc8">tty0</span><span
		class="sc0">
</span><span class="sc4">echo</span><span class="sc0"> </span><span class="sc8">-e</span><span
		class="sc0"> </span><span class="sc8">-n</span><span class="sc0"> </span><span
		class="sc6">'\033[?25l'</span><span class="sc0"> </span><span
		class="sc7">&gt;</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">dev</span><span class="sc7">/</span><span class="sc8">tty0</span><span
		class="sc0">

</span><span class="sc8">ENABLE_USB_SLAVE_EMI_TEST</span><span class="sc7">=</span><span
		class="sc3">0</span><span class="sc0">
</span><span class="sc4">if</span><span class="sc0"> </span><span class="sc7">[</span><span
		class="sc0"> </span><span class="sc9">$ENABLE_USB_SLAVE_EMI_TEST</span><span
		class="sc0"> </span><span class="sc7">==</span><span class="sc0"> </span><span
		class="sc3">1</span><span class="sc0"> </span><span class="sc7">]</span><span
		class="sc0">
</span><span class="sc4">then</span><span class="sc0">
		</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"setting up USB slave"</span><span class="sc0">
		</span><span class="sc8">RANDOM_SERIAL</span><span class="sc7">=</span><span
		class="sc11">$(hexdump -d -n 4 /dev/urandom | \
				sed -e "s/\s\+/ /g" | \
				cut -d' ' -f2,3 -s | \
				sed -e "s/\s\+//g" )</span><span class="sc0">

		</span><span class="sc8">modprobe</span><span class="sc0"> </span><span
		class="sc8">g_midi</span><span class="sc0"> </span><span class="sc8">idVendor</span><span
		class="sc7">=</span><span class="sc3">0x0d60</span><span class="sc0"> </span><span
		class="sc8">idProduct</span><span class="sc7">=</span><span
		class="sc3">0x3434</span><span class="sc0"> </span><span class="sc7">\</span><span
		class="sc0">
				</span><span class="sc8">iManufacturer</span><span class="sc7">=</span><span
		class="sc5">"Stanton Magnetics"</span><span class="sc0"> </span><span
		class="sc8">iProduct</span><span class="sc7">=</span><span class="sc5">"SCS.4DJ"</span><span
		class="sc0"> </span><span class="sc7">\</span><span class="sc0">
				</span><span class="sc8">iSerialNumber</span><span class="sc7">=</span><span
		class="sc5">"$RANDOM_SERIAL"</span><span class="sc0">
</span><span class="sc4">fi</span><span class="sc0">

</span><span class="sc8">UBI_OK</span><span class="sc7">=</span><span
		class="sc3">0</span><span class="sc0">


</span><span class="sc4">if</span><span class="sc0"> </span><span class="sc4">test</span><span
		class="sc0"> </span><span class="sc4">-e</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">dev</span><span class="sc7">/</span><span
		class="sc8">mtd5</span><span class="sc0">
</span><span class="sc4">then</span><span class="sc0">
		</span><span class="sc2"># Hynix flash partition scheme</span><span
		class="sc0">
		</span><span class="sc8">MTD_USERFS</span><span class="sc7">=</span><span
		class="sc3">5</span><span class="sc0">
</span><span class="sc4">else</span><span class="sc0">
		</span><span class="sc2"># Samsung flash partition scheme</span><span
		class="sc0">
		</span><span class="sc8">MTD_USERFS</span><span class="sc7">=</span><span
		class="sc3">3</span><span class="sc0">
</span><span class="sc4">fi</span><span class="sc0">

</span><span class="sc4">echo</span><span class="sc0"> </span><span class="sc5">"Setting up ubi/ubifs"</span><span
		class="sc0">
</span><span class="sc8">ubiattach</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">dev</span><span class="sc7">/</span><span
		class="sc8">ubi_ctrl</span><span class="sc0"> </span><span class="sc7">-</span><span
		class="sc8">m</span><span class="sc0"> </span><span class="sc9">$MTD_USERFS</span><span
		class="sc0"> </span><span class="sc7">&amp;&amp;</span><span
		class="sc0"> </span><span class="sc7">\</span><span class="sc0">
		</span><span class="sc8">mount</span><span class="sc0"> </span><span
		class="sc8">-t</span><span class="sc0"> </span><span class="sc8">ubifs</span><span
		class="sc0"> </span><span class="sc8">ubi1</span><span class="sc7">:</span><span
		class="sc8">app</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">home</span><span class="sc0"> </span><span class="sc7">&amp;&amp;</span><span
		class="sc0"> </span><span class="sc7">\</span><span class="sc0">
		</span><span class="sc8">UBI_OK</span><span class="sc7">=</span><span
		class="sc3">1</span><span class="sc0">

</span><span class="sc4">if</span><span class="sc0"> </span><span class="sc7">[</span><span
		class="sc0"> </span><span class="sc9">$UBI_OK</span><span class="sc0"> </span><span
		class="sc7">==</span><span class="sc0"> </span><span class="sc3">0</span><span
		class="sc0"> </span><span class="sc7">]</span><span class="sc0">
</span><span class="sc4">then</span><span class="sc0">
		</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"Application not found."</span><span class="sc0"> </span><span
		class="sc7">&gt;</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">dev</span><span class="sc7">/</span><span class="sc8">tty0</span><span
		class="sc0">
		</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"Formatting user partition..."</span><span class="sc0"> </span><span
		class="sc7">&gt;</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">dev</span><span class="sc7">/</span><span class="sc8">tty0</span><span
		class="sc0">

		</span><span class="sc2"># This might fail, depending on whether or not ubiattach succeeded</span><span
		class="sc0">
		</span><span class="sc8">ubidetach</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">dev</span><span class="sc7">/</span><span
		class="sc8">ubi_ctrl</span><span class="sc0"> </span><span class="sc7">-</span><span
		class="sc8">m</span><span class="sc0"> </span><span class="sc9">$MTD_USERFS</span><span
		class="sc0"> </span><span class="sc7">||</span><span class="sc0"> </span><span
		class="sc4">echo</span><span class="sc0"> </span><span class="sc5">"Can't detach but continuing anyway"</span><span
		class="sc0">

		</span><span class="sc8">ubiformat</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">dev</span><span class="sc7">/</span><span
		class="sc8">mtd</span><span class="sc10">${MTD_USERFS}</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">y</span><span
		class="sc0"> </span><span class="sc7">&amp;&amp;</span><span
		class="sc0"> </span><span class="sc7">\</span><span class="sc0">
				</span><span class="sc8">ubiattach</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">dev</span><span class="sc7">/</span><span
		class="sc8">ubi_ctrl</span><span class="sc0"> </span><span class="sc7">-</span><span
		class="sc8">m</span><span class="sc0"> </span><span class="sc9">$MTD_USERFS</span><span
		class="sc0"> </span><span class="sc7">&amp;&amp;</span><span
		class="sc0"> </span><span class="sc7">\</span><span class="sc0">
				</span><span class="sc8">ubimkvol</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">dev</span><span class="sc7">/</span><span
		class="sc8">ubi1</span><span class="sc0"> </span><span class="sc8">-N</span><span
		class="sc0"> </span><span class="sc8">app</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">m</span><span class="sc0"> </span><span
		class="sc7">&amp;&amp;</span><span class="sc0"> </span><span
		class="sc7">\</span><span class="sc0">
				</span><span class="sc8">mount</span><span class="sc0"> </span><span
		class="sc8">-t</span><span class="sc0"> </span><span class="sc8">ubifs</span><span
		class="sc0"> </span><span class="sc8">ubi1</span><span class="sc7">:</span><span
		class="sc8">app</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">home</span><span class="sc0">
</span><span class="sc4">fi</span><span class="sc0">

</span><span class="sc4">if</span><span class="sc0"> </span><span class="sc4">test</span><span
		class="sc0"> </span><span class="sc4">-x</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">home</span><span class="sc7">/</span><span
		class="sc8">jars</span><span class="sc7">/</span><span class="sc8">workspace</span><span
		class="sc7">/</span><span class="sc8">app</span><span class="sc7">/</span><span
		class="sc8">mx35r</span><span class="sc7">/</span><span class="sc8">djapp</span><span
		class="sc0">
</span><span class="sc4">then</span><span class="sc0">
		</span><span class="sc2"># Check for BIST request</span><span class="sc0">
		</span><span class="sc4">if</span><span class="sc0"> </span><span
		class="sc4">test</span><span class="sc0"> </span><span class="sc4">-d</span><span
		class="sc0"> </span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bist</span><span class="sc0">
		</span><span class="sc4">then</span><span class="sc0">
				</span><span class="sc4">cd</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">root</span><span class="sc7">/</span><span
		class="sc8">bist</span><span class="sc7">/</span><span class="sc8">tests</span><span
		class="sc7">/</span><span class="sc8">entry</span><span class="sc0">
				</span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bin</span><span class="sc7">/</span><span
		class="sc8">bist</span><span class="sc0">
		</span><span class="sc4">fi</span><span class="sc0">

		</span><span class="sc2"># Start usbmuxd (coldplug)</span><span class="sc0">
		</span><span class="sc8">usbmuxd</span><span class="sc0">

		</span><span class="sc2"># Set default language to English</span><span
		class="sc0">
		</span><span class="sc4">export</span><span class="sc0"> </span><span
		class="sc8">LANG</span><span class="sc7">=</span><span class="sc8">en_US.UTF-8</span><span
		class="sc0">

		</span><span class="sc2"># Core dumps -- set size limit in KB</span><span
		class="sc0">
		</span><span class="sc4">export</span><span class="sc0"> </span><span
		class="sc8">COREDUMP_PREFIX</span><span class="sc7">=/</span><span
		class="sc8">home</span><span class="sc7">/</span><span class="sc8">SCS.4DJ_error_report</span><span
		class="sc0">
		</span><span class="sc4">ulimit</span><span class="sc0"> </span><span
		class="sc8">-c</span><span class="sc0"> </span><span class="sc3">160000</span><span
		class="sc0">
		</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"${COREDUMP_PREFIX}_%e_%t"</span><span class="sc0"> </span><span
		class="sc7">&gt;</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">proc</span><span class="sc7">/</span><span class="sc8">sys</span><span
		class="sc7">/</span><span class="sc8">kernel</span><span class="sc7">/</span><span
		class="sc8">core_pattern</span><span class="sc0">

		</span><span class="sc2"># Delete any old core dumps</span><span
		class="sc0">
		</span><span class="sc4">rm</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">rf</span><span class="sc0"> </span><span
		class="sc5">"${COREDUMP_PREFIX}"</span><span class="sc7">*</span><span
		class="sc0">

		</span><span class="sc4">while</span><span class="sc0"> </span><span
		class="sc4">true</span><span class="sc0">
		</span><span class="sc4">do</span><span class="sc0">
				</span><span class="sc2"># Start Xfbdev if not running</span><span
		class="sc0">
				</span><span class="sc8">fbset</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">depth</span><span class="sc0"> </span><span
		class="sc3">16</span><span class="sc0">
				</span><span class="sc8">pgrep</span><span class="sc0"> </span><span
		class="sc8">Xfbdev</span><span class="sc0"> </span><span class="sc7">||</span><span
		class="sc0"> </span><span class="sc8">Xfbdev</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">keybd</span><span class="sc0"> </span><span
		class="sc8">keyboard</span><span class="sc0"> </span><span class="sc7">-</span><span
		class="sc8">screen</span><span class="sc0"> </span><span class="sc3">480</span><span
		class="sc8">x272x16</span><span class="sc0"> </span><span class="sc7">&amp;</span><span
		class="sc0">

				</span><span class="sc4">cd</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">home</span><span class="sc7">/</span><span
		class="sc8">jars</span><span class="sc7">/</span><span class="sc8">workspace</span><span
		class="sc7">/</span><span class="sc8">app</span><span class="sc7">/</span><span
		class="sc8">mx35r</span><span class="sc0">
				</span><span class="sc7">./</span><span class="sc8">djapp</span><span
		class="sc0"> </span><span class="sc7">&amp;</span><span class="sc0">
				</span><span class="sc8">PID</span><span class="sc7">=</span><span
		class="sc9">$!</span><span class="sc0">
				</span><span class="sc4">wait</span><span class="sc0"> </span><span
		class="sc9">$PID</span><span class="sc0">
				</span><span class="sc8">DJAPP_RET</span><span class="sc7">=</span><span
		class="sc9">$?</span><span class="sc0">
				</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">ne</span><span class="sc0"> </span><span
		class="sc6">'\x90\x00\x00'</span><span class="sc0"> </span><span
		class="sc7">&gt;</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">dev</span><span class="sc7">/</span><span class="sc8">ttymxc1</span><span
		class="sc0">

				</span><span class="sc4">if</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc3">0</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc8">poweroff</span><span class="sc0">
						</span><span class="sc4">break</span><span class="sc0">   </span><span
		class="sc2"># Counterintuitively, poweroff returns</span><span
		class="sc0">
				</span><span class="sc4">elif</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">ge</span><span
		class="sc0"> </span><span class="sc3">16</span><span class="sc0"> </span><span
		class="sc4">-a</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">lt</span><span
		class="sc0"> </span><span class="sc3">32</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc2"># Unmount devices so they will be removed cleanly if the user decides to remove them</span><span
		class="sc0">
						</span><span class="sc8">umount</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">lr</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">mnt</span><span class="sc7">/</span><span
		class="sc8">sd</span><span class="sc7">*</span><span class="sc0">
						</span><span class="sc8">umount</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc8">lr</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">mnt</span><span class="sc7">/</span><span
		class="sc8">ipod</span><span class="sc7">*</span><span class="sc0">

						</span><span class="sc2"># Don't kill X here</span><span
		class="sc0">
						</span><span class="sc8">MIDI_CHAN</span><span class="sc7">=$((</span><span
		class="sc9">$DJAPP_RET</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc0"> </span><span class="sc3">16</span><span
		class="sc7">))</span><span class="sc0">
						</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"MIDI channel $MIDI_CHAN"</span><span class="sc0">
						</span><span class="sc4">cd</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">home</span><span class="sc7">/</span><span
		class="sc8">jars</span><span class="sc7">/</span><span class="sc8">workspace</span><span
		class="sc7">/</span><span class="sc8">midi_controller</span><span
		class="sc7">/</span><span class="sc8">mx35r</span><span class="sc0">
						</span><span class="sc7">./</span><span class="sc8">midi_controller</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">m</span><span
		class="sc0"> </span><span class="sc9">$MIDI_CHAN</span><span
		class="sc0"> </span><span class="sc7">&amp;</span><span class="sc0">
						</span><span class="sc8">PID</span><span class="sc7">=</span><span
		class="sc9">$!</span><span class="sc0">
						</span><span class="sc4">sleep</span><span class="sc0"> </span><span
		class="sc3">1</span><span class="sc0">
						</span><span class="sc4">dd</span><span class="sc0"> </span><span
		class="sc8">if</span><span class="sc7">=/</span><span class="sc8">home</span><span
		class="sc7">/</span><span class="sc8">jars</span><span class="sc7">/</span><span
		class="sc8">workspace</span><span class="sc7">/</span><span
		class="sc8">app</span><span class="sc7">/</span><span class="sc8">resources</span><span
		class="sc7">/</span><span class="sc8">themes</span><span class="sc7">/</span><span
		class="sc8">GrayRed480x272</span><span class="sc7">/</span><span
		class="sc8">gtk-2.0</span><span class="sc7">/</span><span class="sc8">scs4_midi_screen.rgb565</span><span
		class="sc0"> </span><span class="sc8">of</span><span class="sc7">=/</span><span
		class="sc8">dev</span><span class="sc7">/</span><span class="sc8">fb0</span><span
		class="sc0"> </span><span class="sc8">bs</span><span class="sc7">=</span><span
		class="sc3">960</span><span class="sc0"> </span><span class="sc8">count</span><span
		class="sc7">=</span><span class="sc3">272</span><span class="sc0">
						</span><span class="sc4">wait</span><span class="sc0"> </span><span
		class="sc9">$PID</span><span class="sc0">

				</span><span class="sc4">elif</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc3">64</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc4">set</span><span class="sc0"> </span><span
		class="sc8">-x</span><span class="sc0">
						</span><span class="sc2"># The application has indicated that it wants to do a firmware update</span><span
		class="sc0">
						</span><span class="sc2"># and it creates a symlink at /tmp/djapp-requested-fwupdate</span><span
		class="sc0">
						</span><span class="sc2"># For some reason -h tests for symlinks</span><span
		class="sc0">
						</span><span class="sc4">if</span><span class="sc0"> </span><span
		class="sc4">test</span><span class="sc0"> </span><span class="sc7">!</span><span
		class="sc0"> </span><span class="sc4">-h</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">tmp</span><span class="sc7">/</span><span
		class="sc8">djapp-requested-fwupdate</span><span class="sc0">
						</span><span class="sc4">then</span><span class="sc0">
								</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"The application requested a firmware update but the symlink"</span><span
		class="sc0"> </span><span class="sc7">&gt;</span><span class="sc3">2</span><span
		class="sc0">
								</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"to the update was not set.  (/tmp/djapp-requested-fwupdate)"</span><span
		class="sc0"> </span><span class="sc7">&gt;</span><span class="sc3">2</span><span
		class="sc0">
								</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"No update to apply -- restarting application"</span><span
		class="sc0"> </span><span class="sc7">&gt;</span><span class="sc3">2</span><span
		class="sc0">
								</span><span class="sc4">continue</span><span class="sc0">
						</span><span class="sc4">fi</span><span class="sc0">
						</span><span class="sc8">killall</span><span class="sc0"> </span><span
		class="sc8">Xfbdev</span><span class="sc0">

						</span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bin</span><span class="sc7">/</span><span
		class="sc8">fwupdate-apply</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">tmp</span><span class="sc7">/</span><span
		class="sc8">djapp-requested-fwupdate</span><span class="sc0">
						</span><span class="sc4">rm</span><span class="sc0"> </span><span
		class="sc8">-f</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">tmp</span><span class="sc7">/</span><span class="sc8">djapp-requested-fwupdate</span><span
		class="sc0">

						</span><span class="sc2"># The update may trigger a reboot on its own, or may exit, indicating</span><span
		class="sc0">
						</span><span class="sc2"># we should continue as normal</span><span
		class="sc0">
						</span><span class="sc4">set</span><span class="sc0"> </span><span
		class="sc7">+</span><span class="sc8">x</span><span class="sc0">
						</span><span class="sc4">continue</span><span class="sc0">

				</span><span class="sc4">elif</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc3">68</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc2"># X is not always in a good state when we exit</span><span
		class="sc0">
						</span><span class="sc8">killall</span><span class="sc0"> </span><span
		class="sc8">Xfbdev</span><span class="sc0">

						</span><span class="sc2"># Delete local database and support files (-wal, -shm,...)</span><span
		class="sc0">
						</span><span class="sc4">rm</span><span class="sc0"> </span><span
		class="sc8">-f</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">home</span><span class="sc7">/</span><span class="sc8">jars</span><span
		class="sc7">/</span><span class="sc8">workspace</span><span
		class="sc7">/</span><span class="sc8">app</span><span class="sc7">/</span><span
		class="sc8">local.db</span><span class="sc7">*</span><span class="sc0">

						</span><span class="sc2"># Delete midi controller configuration</span><span
		class="sc0">
						</span><span class="sc4">rm</span><span class="sc0"> </span><span
		class="sc8">-f</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">home</span><span class="sc7">/</span><span class="sc8">jars</span><span
		class="sc7">/</span><span class="sc8">workspace</span><span
		class="sc7">/</span><span class="sc8">midi_controller</span><span
		class="sc7">/</span><span class="sc8">resources</span><span
		class="sc7">/*.</span><span class="sc8">txt</span><span class="sc0">
						</span><span class="sc4">sync</span><span class="sc0">
						</span><span class="sc4">continue</span><span class="sc0">

				</span><span class="sc4">elif</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc3">69</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc2"># X is not always in a good state when we exit</span><span
		class="sc0">
						</span><span class="sc8">killall</span><span class="sc0"> </span><span
		class="sc8">Xfbdev</span><span class="sc0">

						</span><span class="sc2"># Run a script</span><span class="sc0">
						</span><span class="sc4">if</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc4">-f</span><span
		class="sc0"> </span><span class="sc7">/</span><span class="sc8">tmp</span><span
		class="sc7">/</span><span class="sc8">djapp-exit-script.sh</span><span
		class="sc0"> </span><span class="sc7">]</span><span class="sc0">
						</span><span class="sc4">then</span><span class="sc0">
								</span><span class="sc4">chmod</span><span class="sc0"> </span><span
		class="sc7">+</span><span class="sc8">x</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">tmp</span><span class="sc7">/</span><span
		class="sc8">djapp-exit-script.sh</span><span class="sc0">
								</span><span class="sc4">sh</span><span class="sc0"> </span><span
		class="sc8">-x</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">tmp</span><span class="sc7">/</span><span class="sc8">djapp-exit-script.sh</span><span
		class="sc0">
								</span><span class="sc4">rm</span><span class="sc0"> </span><span
		class="sc8">-f</span><span class="sc0"> </span><span class="sc7">/</span><span
		class="sc8">tmp</span><span class="sc7">/</span><span class="sc8">djapp-exit-script.sh</span><span
		class="sc0">
						</span><span class="sc4">else</span><span class="sc0">
								</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc6">'Could not find /tmp/djapp-exit-script.sh'</span><span
		class="sc0">
						</span><span class="sc4">fi</span><span class="sc0">
						</span><span class="sc4">continue</span><span class="sc0">

				</span><span class="sc4">elif</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$DJAPP_RET</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">ge</span><span
		class="sc0"> </span><span class="sc3">128</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc8">ERROR_SIGNAL</span><span class="sc7">=$((</span><span
		class="sc9">$DJAPP_RET</span><span class="sc0"> </span><span
		class="sc7">-</span><span class="sc0"> </span><span class="sc3">128</span><span
		class="sc7">))</span><span class="sc0">
						</span><span class="sc8">SIGINT</span><span class="sc7">=</span><span
		class="sc3">2</span><span class="sc0">
						</span><span class="sc8">SIGTERM</span><span class="sc7">=</span><span
		class="sc3">15</span><span class="sc0">
						</span><span class="sc8">SIGSTOP</span><span class="sc7">=</span><span
		class="sc3">19</span><span class="sc0">

						</span><span class="sc2"># Kill Xfbdev, just in case</span><span
		class="sc0">
						</span><span class="sc8">killall</span><span class="sc0"> </span><span
		class="sc8">Xfbdev</span><span class="sc0">
						</span><span class="sc4">if</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$ERROR_SIGNAL</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc9">$SIGINT</span><span class="sc0"> </span><span
		class="sc4">-o</span><span class="sc0"> </span><span class="sc9">$ERROR_SIGNAL</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc9">$SIGTERM</span><span class="sc0"> </span><span
		class="sc4">-o</span><span class="sc0"> </span><span class="sc9">$ERROR_SIGNAL</span><span
		class="sc0"> </span><span class="sc7">-</span><span class="sc8">eq</span><span
		class="sc0"> </span><span class="sc9">$SIGSTOP</span><span class="sc0"> </span><span
		class="sc7">]</span><span class="sc0">
						</span><span class="sc4">then</span><span class="sc0">
								</span><span class="sc2"># Stopped for debugging</span><span
		class="sc0">
								</span><span class="sc4">break</span><span class="sc0">
						</span><span class="sc4">else</span><span class="sc0">
								</span><span class="sc2"># Check for a core dump</span><span
		class="sc0">
								</span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bin</span><span class="sc7">/</span><span
		class="sc8">handle-core-dumps.sh</span><span class="sc0">

								</span><span class="sc2"># Try restarting application</span><span
		class="sc0">
								</span><span class="sc4">continue</span><span class="sc0">
						</span><span class="sc4">fi</span><span class="sc0">
				</span><span class="sc4">else</span><span class="sc0">
						</span><span class="sc2"># Kill Xfbdev, just in case</span><span
		class="sc0">
						</span><span class="sc8">killall</span><span class="sc0"> </span><span
		class="sc8">Xfbdev</span><span class="sc0">
				</span><span class="sc4">fi</span><span class="sc0">
		</span><span class="sc4">done</span><span class="sc0">
</span><span class="sc4">elif</span><span class="sc0"> </span><span class="sc4">test</span><span
		class="sc0"> </span><span class="sc4">-d</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">root</span><span class="sc7">/</span><span
		class="sc8">bist</span><span class="sc0">
</span><span class="sc4">then</span><span class="sc0">
		</span><span class="sc2"># Wait for devices to settle</span><span
		class="sc0">
		</span><span class="sc8">udevadm</span><span class="sc0"> </span><span
		class="sc8">settle</span><span class="sc0">
		</span><span class="sc4">sleep</span><span class="sc0"> </span><span
		class="sc3">10</span><span class="sc0">
		</span><span class="sc8">udevadm</span><span class="sc0"> </span><span
		class="sc8">settle</span><span class="sc0">

		</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"Checking for firmware updates..."</span><span class="sc0">
		</span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bin</span><span class="sc7">/</span><span
		class="sc8">fwupdate-check-all-devices</span><span class="sc0">

		</span><span class="sc4">cd</span><span class="sc0"> </span><span
		class="sc7">/</span><span class="sc8">root</span><span class="sc7">/</span><span
		class="sc8">bist</span><span class="sc7">/</span><span class="sc8">tests</span><span
		class="sc7">/</span><span class="sc8">menu</span><span class="sc0">
		</span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bin</span><span class="sc7">/</span><span
		class="sc8">bist</span><span class="sc0">
</span><span class="sc4">else</span><span class="sc0">
		</span><span class="sc4">echo</span><span class="sc0"> </span><span
		class="sc5">"No BIST or application.  Insert USB stick with update."</span><span
		class="sc0"> </span><span class="sc7">&gt;/</span><span class="sc8">dev</span><span
		class="sc7">/</span><span class="sc8">tty0</span><span class="sc0">
		</span><span class="sc4">while</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc3">1</span><span
		class="sc0"> </span><span class="sc7">]</span><span class="sc0">
		</span><span class="sc4">do</span><span class="sc0">
				</span><span class="sc4">sleep</span><span class="sc0"> </span><span
		class="sc3">10</span><span class="sc0">
				</span><span class="sc7">/</span><span class="sc8">root</span><span
		class="sc7">/</span><span class="sc8">bin</span><span class="sc7">/</span><span
		class="sc8">fwupdate-check-all-devices</span><span class="sc0">
				</span><span class="sc4">if</span><span class="sc0"> </span><span
		class="sc7">[</span><span class="sc0"> </span><span class="sc9">$?</span><span
		class="sc0"> </span><span class="sc7">==</span><span class="sc0"> </span><span
		class="sc3">0</span><span class="sc0"> </span><span class="sc7">]</span><span
		class="sc0">
				</span><span class="sc4">then</span><span class="sc0">
						</span><span class="sc2"># Successful update -- reboot even if the script does not specify</span><span
		class="sc0">
						</span><span class="sc2"># a reboot, because we have nothing better to do</span><span
		class="sc0">
						</span><span class="sc8">reboot</span><span class="sc0">
				</span><span class="sc4">fi</span><span class="sc0">
		</span><span class="sc4">done</span><span class="sc0">
</span><span class="sc4">fi</span><span class="sc0">



</pre>
<h2>The DJApp itself</h2>
<p>Some app resources can be found in
	DjappUpdateAction.tar\home\jars\workspace\app\resources\, including the
	db schema, of which there are two:
	<ol><li>One called ddb_schema (Device
	Database Schema?) </li><li>and ldb_schema (Local Database Schema).</li></ol> The DDB
	doesn&#8217;t have indexes on things like song.bpm and song.artist, whereas
	the LDB does, which leads me to believe that the database data from USB
	devices is simply imported into the local device database whenever you
	plug in a new device. I can&#8217;t tell if the data in the LDB is persistant
	across reboots.</p>
<p>The application language files have some further info on the development of the device (* symbols added for privacy),
<pre>
POT-Creation-Date: 2011-05-24 15:35-0700
PO-Revision-Date: 2008-04-14 18:18-0700
Last-Translator: S******** M******** <********@ivl.com>
Language-Team: ENGLISH S******** M******** <********@ivl.com>
</pre
</p>
<p>The new 'Generate Device Playlist' feature? Looks like the code was based off of the stanton forum community post!
<pre>
(header of generate_playlist.sh)

#!/bin/sh
#
# Copyright (C) 2011 by IVL, Inc.,
# All Rights Reserved Worldwide.
#
# This script was derived from work by Vincent Falco from One Guy Group, Inc.,
# You can find him as "thevinn" in the Stanton SCS.4DJ forums
#
# This file is provided under MIT License
# http://www.opensource.org/licenses/mit-license.php
#
# Stanton SCS.4DJ is a trademark of Stanton Magnetics Inc
#   http://www.stantondj.com
#
# -----------------------------------------------------------------------------
</pre>
</p>

<p>Other 'pegasus' compatible network cards that we could use (if we updated the udev rules)</p>
<pre>
3Com USB Ethernet 3C460B
ATEN USB Ethernet UC-110T
Accton USB 10/100 Ethernet Adapter
SpeedStream USB 10/100 Ethernet
ADMtek ADM8511 "Pegasus II" USB Ethernet
ADMtek ADM8513 "Pegasus II" USB Ethernet
ADMtek ADM8515 "Pegasus II" USB-2.0 Ethernet
ADMtek AN986 "Pegasus" USB Ethernet (evaluation board)
AN986A USB MAC
AEI USB Fast Ethernet Adapter
Allied Telesyn Int. AT-USB100
Belkin F5D5050 USB Ethernet
Billionton USB-100
Billionton USBEL-100
Billionton USBE-100
iPAQ Networking 10/100 USB
Corega FEther USB-TX
Corega FEther USB-TXS
D-Link DSB-650TX
D-Link DSB-650TX(PNA)
D-Link DSB-650
GOLDPFEIL USB Adapter
ELECOM USB Ethernet LD-USB20
EasiDock Ethernet
Elsa Micolink USB2Ethernet
GIGABYTE GN-BR402W Wireless Router
Hawking UF100 10/100 Ethernet
HP hn210c Ethernet USB
IO DATA USB ET/TX
IO DATA USB ET/TX-S
IO DATA USB ETX-US2
Kingston KNU101TX Ethernet
LANEED USB Ethernet LD-USB/TX
LANEED USB Ethernet LD-USBL/TX
LANEED USB Ethernet LD-USB/T
Linksys USB10TX
Linksys USB100TX
Linksys USB10T Ethernet Adapter
Linksys USBVPN1
Linksys USB USB100TX
MELCO/BUFFALO LUA-TX
MELCO/BUFFALO LUA2-TX
Microsoft MN-110
NETGEAR FA101
OCT Inc.
OCT USB TO Ethernet
smartNIC 2 PnP Adapter
SMC 202 USB Ethernet
SMC 2206 USB Ethernet
SOHOware NUB100 Ethernet
SOHOware NUB110 Ethernet
</pre>
<h2 id="shell">Got shell access!!!</h2>
<p><em>Friday 13th April</em>. After I had the filesystem files, I rewrote the update script to give us a shell on the SCS.4DJ screen! To get shell, do this:</p>

<ol>
<li>Extract the "update" file <a href="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/root.zip">[here]</a> on a usb stick</li>
<li>Get a USB keyboard plugged into the SCS.4DJ</li>
<li>Turn on the device whilst holding the pitch bend [-] key on the left deck, and the pitch bend [+] key on the right deck. The top corner lights will flash if you have done this correctly.</li>
<li>Once inside the test menu, press the [SYSTEM] button to initiate a firmware update</li>
<li>a login prompt should appear</li>
<li>enter "user" at the login prompt and type in "user" as the password.</li>
<li>boom <img src='http://blog.switchsystems.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>
<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/IMG_20120413_125957.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/IMG_20120413_125957.jpg" alt="" title="IMG_20120413_125957" width="640" height="480" class="alignnone size-full wp-image-699" style="padding:5px 0px;"/></a>


<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/IMG_20120413_130029.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2012/04/IMG_20120413_130029.jpg" alt="" title="IMG_20120413_130029" width="640" height="480" class="alignnone size-full wp-image-700" style="padding:5px 0px;" /></a>

<h2>Next Steps:</h2>
<p>To continue the investigation, we need to get a suitable USB ethernet controller so we can access the device.</p>
<p>There may also be some leverage in using ubiattach...</p>
<hr/>
<p>Comments have been disabled, for more information email kris at switchsystems.co.uk or <a href="http://forum.gibson.com/index.php?/topic/85156-can-we-have-the-os-please/">follow this post in the stanton/gibson forums</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2012/04/stanton-scs-4dj-under-the-hood/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OneNote now available on android!</title>
		<link>http://blog.switchsystems.co.uk/2012/02/onenote-now-available-on-android/</link>
		<comments>http://blog.switchsystems.co.uk/2012/02/onenote-now-available-on-android/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 07:58:47 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=643</guid>
		<description><![CDATA[<p><a href="http://www.androidcentral.com/microsofts-onenote-now-available-android">Android Central</a> is reporting that Microsoft OneNote is now available for android devices. Yippee!</p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.androidcentral.com/microsofts-onenote-now-available-android">Android Central</a> is reporting that Microsoft OneNote is now available for android devices. Yippee!</p>
<img src="http://chart.apis.google.com/chart?cht=qr&#038;chs=150x150&#038;chl=market://search%3Fq%3Dpname:com.microsoft.office.onenote">]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2012/02/onenote-now-available-on-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Youtube: one hour per second</title>
		<link>http://blog.switchsystems.co.uk/2012/01/youtube-one-hour-per-second/</link>
		<comments>http://blog.switchsystems.co.uk/2012/01/youtube-one-hour-per-second/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 08:19:21 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Things we like]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=640</guid>
		<description><![CDATA[Youtube have an 
<a href="http://www.onehourpersecond.com">awesome series of infographics</a> based on the fact that "every second, one hour of video is uploaded to youtube".]]></description>
			<content:encoded><![CDATA[<p>Youtube have an awesome series of infographics based on the fact that &#8220;every second, one hour of video is uploaded to youtube&#8221;.</p>

<p>See for yourself at <a href="http://www.onehourpersecond.com">www.onehourpersecond.com</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2012/01/youtube-one-hour-per-second/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comet accused by Microsoft of selling counterfit recovery CDs</title>
		<link>http://blog.switchsystems.co.uk/2012/01/comet-accused-by-microsoft-of-selling-counterfit-recovery-cds/</link>
		<comments>http://blog.switchsystems.co.uk/2012/01/comet-accused-by-microsoft-of-selling-counterfit-recovery-cds/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 14:34:43 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Business News]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=632</guid>
		<description><![CDATA[Microsoft takes legal action against Comet Group plc over recovery media.]]></description>
			<content:encoded><![CDATA[<p><a href="http://arstechnica.com/tech-policy/news/2012/01/microsoft-claims-uk-retailer-sold-counterfeit-windows-recovery-cds.ars">ArsTechnica Reports</a> on a High Court filing in the UK by Microsoft that Comet created and sold &#8220;more than 94,000 sets of counterfeit Windows Vista and Windows XP recovery CDs&#8221; <em>source: <a href="http://www.microsoft.com/Presspass/press/2012/jan12/01-04CometPR.mspx">Microsoft News Centre</a></em>.</p>
<p>The recovery discs were being sold to customers for £14.99 when customers already have a recovery partition on their computer with the ability to create rescue media.</p>
<p>Comet <a href="press.comet.co.uk/index.php?cID=330&#038;cType=news">have responded</a> stating that they were acting in the interest of the customer, due to the policy change that OEM Microsoft operating system installs would not ship with recovery discs.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2012/01/comet-accused-by-microsoft-of-selling-counterfit-recovery-cds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exeter Impact Awards</title>
		<link>http://blog.switchsystems.co.uk/2011/12/exeter-impact-awards/</link>
		<comments>http://blog.switchsystems.co.uk/2011/12/exeter-impact-awards/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 17:06:47 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Business News]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=625</guid>
		<description><![CDATA[The inaugural Exeter Impact Awards evening is hailed a success...]]></description>
			<content:encoded><![CDATA[<img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/12/exeter_impact_awards.jpg" alt="" title="exeter_impact_awards" width="560" height="350" class="alignnone size-full wp-image-626" />
<p>Congratulations to all who were shortlisted for last nights inaugural <a href="http://www.exeter.ac.uk/impactawards/">Exeter Impact awards</a> held by the University of Exeter. An enjoyable evening with good company, good food, and even a few laughs!</p>
<p>Thank you to all of the RKT team for all their hard work in putting the event together.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2011/12/exeter-impact-awards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Christmas Opening Hours</title>
		<link>http://blog.switchsystems.co.uk/2011/12/christmas-opening-hours/</link>
		<comments>http://blog.switchsystems.co.uk/2011/12/christmas-opening-hours/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 12:29:45 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Our News]]></category>
		<category><![CDATA[christmas]]></category>
		<category><![CDATA[hours]]></category>
		<category><![CDATA[xmas]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=615</guid>
		<description><![CDATA[Christmas opening hours:
<ul>
<li><strong>Friday 23rd December</strong><br/>09:00 - 13:00 (Half Day)</li>
<li><strong>Saturday 24th December</strong><br/>Closed</li>
<li><strong>Sunday 25th December</strong><br/>Closed</li>
<li><strong>Monday 26th December</strong><br/>Closed</li>
<li><strong>Tuesday 27th December</strong> to <strong>Friday 30th December</strong><br/>09:00 - 13:00 (Half Day)</li>
<li><strong>Saturday 31st December</strong><br/>Closed</li>
<li><strong>Sunday 1st January</strong><br/>Closed</li>
<li><strong>Monday 2nd January</strong><br/>Closed</li>
<li><strong>Tuesday 3rd January</strong><br/>Open as usual</li>
</ul>
<p>As usual, our out-of-hours emergency contact number will be available 24/7, and we will be regularly checking phones and email so please leave a message if you need to contact us over the festive period.</p>]]></description>
			<content:encoded><![CDATA[<img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/12/xmas2011.gif" alt="" title="xmas2011" width="560" height="353" class="alignnone size-full wp-image-616" />
<p>Our opening hours over christmas and new years will be:</p>
<ul>
<li><strong>Friday 23rd December</strong><br/>09:00 &#8211; 13:00 (Half Day)</li>
<li><strong>Saturday 24th December</strong><br/>Closed</li>
<li><strong>Sunday 25th December</strong><br/>Closed</li>
<li><strong>Monday 26th December</strong><br/>Closed</li>
<li><strong>Tuesday 27th December</strong> to <strong>Friday 30th December</strong><br/>09:00 &#8211; 13:00 (Half Day)</li>
<li><strong>Saturday 31st December</strong><br/>Closed</li>
<li><strong>Sunday 1st January</strong><br/>Closed</li>
<li><strong>Monday 2nd January</strong><br/>Closed</li>
<li><strong>Tuesday 3rd January</strong><br/>Open as usual</li>
</ul>
<p>As usual, our out-of-hours emergency contact number will be available 24/7, and we will be regularly checking phones and email so please leave a message if you need to contact us over the festive period.</p>
<p>Stay tuned for our exciting new newsletter, which should be arriving soon!</p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2011/12/christmas-opening-hours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kris&#8217; datacentre exploits go largly un-noticed as he avoids imploding the internet &#8230;</title>
		<link>http://blog.switchsystems.co.uk/2011/11/kris-datacentre-exploits-go-largly-un-noticed-as-he-avoids-imploding-the-internet/</link>
		<comments>http://blog.switchsystems.co.uk/2011/11/kris-datacentre-exploits-go-largly-un-noticed-as-he-avoids-imploding-the-internet/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 16:20:49 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Our News]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=602</guid>
		<description><![CDATA[Kris' datacentre exploits go largly un-noticed as he avoids imploding the internet ...]]></description>
			<content:encoded><![CDATA[<p>So last friday&#8217;s datacentre upgrade went well I thought, no cuts or bruises, no data loss&#8230; plus I got to the data centre in 4 hours which is pretty good going from down here in the south west!</p>
<p>After signing in, I walked up to the cage where our servers sit. I took a couple of sneaky pictures &#8211; i wasn&#8217;t sure whether I was allowed to take pictures or not inside the &#8216;secure area&#8217;!</p>
<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre1.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre1.jpg" alt="" title="datacentre1" class="alignleft size-full wp-image-597" style="width:100%;"/></a>
<p><em>Above: yes people, this is what the internet looks like! Dry air-conditioned floors with raised floors, cable raceways, secure cages and flashing lights.</em></p>

<p>So the plan was to take out our old 4U VMware server and replace it with two newer, smaller (1U), and much more powerful machines. Then I remembered this server was racked at the top of the cabinet, making it&#8217;s removal a very carefully executed operation!</p>
<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre2.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre2.jpg" alt="" title="datacentre2" class="alignleft size-full wp-image-598"  style="width:100%;"/></a>
<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre3.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre3.jpg" alt="" title="datacentre2" class="alignleft size-full wp-image-598"  style="width:100%;"/></a>
<p><em>Above: that&#8217;s quite high. and that server is v. heavy!</em></p>

<p>In goes our new gear:</p>
<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre4.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre4.jpg" alt="" title="datacentre2" class="alignleft size-full wp-image-598"  style="width:100%;"/></a>
<a href="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre5.jpg"><img src="http://blog.switchsystems.co.uk/wp-content/uploads/2011/11/datacentre5.jpg" alt="" title="datacentre2" class="alignleft size-full wp-image-598"  style="width:100%;"/></a>
<p>Job done!</p>
<p>Many thanks to the entire Switch Systems team for all their planning and preparation work, making this complete hardware change an operation which only resulted in 90 minutes of downtime (not that I think anyone noticed, as our existing contingency measures meant everything kept running anyway!)</p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2011/11/kris-datacentre-exploits-go-largly-un-noticed-as-he-avoids-imploding-the-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thailand HD manufacturing shortage expected to last 3-6 months</title>
		<link>http://blog.switchsystems.co.uk/2011/11/thailand-hd-manufacturing-shortage-expected-to-last-3-6-months/</link>
		<comments>http://blog.switchsystems.co.uk/2011/11/thailand-hd-manufacturing-shortage-expected-to-last-3-6-months/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 15:50:50 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Business News]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=594</guid>
		<description><![CDATA[<p>From "The Register", Western Digital are sending in divers to help recover some of their flooded HD manufacturing gear. Analysts estimate that 48 million less drives will be shipped in the last quarter of this year because of the devastating flooding.</p>]]></description>
			<content:encoded><![CDATA[<p>From &#8220;<a href="http://www.channelregister.co.uk/2011/11/16/wd_thai_navy/" target="_blank">The Register</a>&#8220;, Western Digital are sending in divers to help recover some of their flooded HD manufacturing gear. Analysts estimate that 48 million less drives will be shipped in the last quarter of this year because of the devastating flooding.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2011/11/thailand-hd-manufacturing-shortage-expected-to-last-3-6-months/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bbc weather website beta</title>
		<link>http://blog.switchsystems.co.uk/2011/10/bbc-weather-website-beta/</link>
		<comments>http://blog.switchsystems.co.uk/2011/10/bbc-weather-website-beta/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 19:43:32 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Things we like]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=592</guid>
		<description><![CDATA[The new website for the bbc weather service is shaping up quite nicely]]></description>
			<content:encoded><![CDATA[The new website for the bbc weather service is 
<a href=" http://beta.bbc.co.uk/weather/2649808 ">shaping up quite nicely</a>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2011/10/bbc-weather-website-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Productivity Future Vision 2011</title>
		<link>http://blog.switchsystems.co.uk/2011/10/microsoft-productivity-future-vision-2011/</link>
		<comments>http://blog.switchsystems.co.uk/2011/10/microsoft-productivity-future-vision-2011/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 12:22:06 +0000</pubDate>
		<dc:creator>Kris Sum</dc:creator>
				<category><![CDATA[Things we like]]></category>

		<guid isPermaLink="false">http://blog.switchsystems.co.uk/?p=590</guid>
		<description><![CDATA[Microsoft have done another 'vision' video, this is thier 2011 future vision of office productivity. Some nice concepts.]]></description>
			<content:encoded><![CDATA[<p>Microsoft have done another &#8216;vision&#8217; video, this is thier 2011 future vision of office productivity. Nice.</p>

<iframe width="560" height="315" src="http://www.youtube.com/embed/a6cNdhOKwi0" frameborder="0" allowfullscreen></iframe>]]></content:encoded>
			<wfw:commentRss>http://blog.switchsystems.co.uk/2011/10/microsoft-productivity-future-vision-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

