<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>0xlab</title>
	<link>default</link>
	<language>en</language>
	<description>0xlab - default</description>

<item>
	<title>Hacking at 0xlab: 0xdroid 正式支援 DevKit8000 開發板</title>
	<guid>tag:blogger.com,1999:blog-1795333590425870072.post-6939371260469383300</guid>
	<link>http://jserv.blogspot.com/2010/03/0xdroid-devkit8000.html</link>
	<description>沈寂的一段時間，現在 &lt;a href=&quot;http://code.google.com/p/0xdroid/&quot;&gt;0xdroid&lt;/a&gt; 又恢復活躍的開發。正如稍早在 0xlab-devel 郵件討論區提及 &quot;&lt;span id=&quot;thread_subject_site&quot;&gt;&lt;a href=&quot;http://groups.google.com/group/0xlab-devel/browse_thread/thread/46332e24feca26a0&quot;&gt;Return back to open source world&lt;/a&gt;&quot;，我們陸續將之前開發的成果，貢獻到自由軟體的世界，環繞在 &lt;a href=&quot;http://code.google.com/p/0xdroid/&quot;&gt;0xdroid&lt;/a&gt; 的項目有：&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;對 &lt;a href=&quot;http://beagleboard.org/&quot;&gt;Beagleboard&lt;/a&gt; 一貫的完整支援，不只是將 Android 運作起來，還要提昇整體的效能與可用性&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;除了支援 &lt;a href=&quot;http://beagleboard.org/&quot;&gt;Beagleboard&lt;/a&gt; 外，對 &lt;a href=&quot;http://elinux.org/DevKit8000&quot;&gt;DevKit8000&lt;/a&gt; 也有充分的支援&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;擴充 &lt;a href=&quot;http://gitorious.org/esuit&quot;&gt;esuit&lt;/a&gt; 並整合 Android CTS (Compatibility Test Suite) &lt;/span&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;與 &lt;a href=&quot;http://groups.csail.mit.edu/uid/sikuli/&quot;&gt;Sikuli&lt;/a&gt;，提供涵蓋 board-level, API-level, Application-specific 的自動測試框架&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;對 Android 為基礎的系統作全面性的功能、效能，與可靠度評比，以及整合上述的自動測試框架，以驗證量化系統的品質&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;在 kanru 的努力與若干網友的貢獻 (hychen, Fred, itszero) 下，現在對 &lt;/span&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;&lt;a href=&quot;http://elinux.org/DevKit8000&quot;&gt;DevKit8000&lt;/a&gt; 的支援&lt;/span&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;已加入到 GIT repository，以下是執行時期的照片：&lt;br /&gt;&lt;/span&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_XYo3WYqTnPk/S5cxQ3U_rmI/AAAAAAAAA7E/iFu7af_PGPg/s1600-h/0xdroid-devkit8k-1.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_XYo3WYqTnPk/S5cxQ3U_rmI/AAAAAAAAA7E/iFu7af_PGPg/s400/0xdroid-devkit8k-1.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5446876440127581794&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;(0xdroid 的桌面與 Launcher)&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_XYo3WYqTnPk/S5cxdFhmhSI/AAAAAAAAA7M/CG9yLiGQRSw/s1600-h/0xdroid-devkit8k-2.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_XYo3WYqTnPk/S5cxdFhmhSI/AAAAAAAAA7M/CG9yLiGQRSw/s400/0xdroid-devkit8k-2.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5446876650096985378&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;(調整為直式顯示，符合原本 Android 的預期輸出假設)&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_XYo3WYqTnPk/S5cxy9HPLNI/AAAAAAAAA7U/__p_K2xNbbE/s1600-h/0xdroid-devkit8k-3.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_XYo3WYqTnPk/S5cxy9HPLNI/AAAAAAAAA7U/__p_K2xNbbE/s400/0xdroid-devkit8k-3.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5446877025796041938&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;目前支援 Android Donut 與 Eclair，在 &lt;a href=&quot;http://code.google.com/p/0xdroid/&quot;&gt;0xdroid&lt;/a&gt; 即是 beagle-donut 與 beagle-eclair，需要搭配最新的 &lt;a href=&quot;http://gitorious.org/0xlab-kernel&quot;&gt;0xlab-kernel&lt;/a&gt;，對 &lt;span id=&quot;thread_subject_site&quot;&gt;&lt;a href=&quot;http://elinux.org/DevKit8000&quot;&gt;DevKit8000&lt;/a&gt;&lt;/span&gt; 週邊做出更好的支援。以下是簡要的功能特徵描述：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;支援 &lt;span id=&quot;thread_subject_site&quot;&gt;&lt;a href=&quot;http://elinux.org/DevKit8000&quot;&gt;DevKit8000&lt;/a&gt;&lt;/span&gt; 特有週邊：Ethernet, LCD panel / touchscreen, keypad&lt;/li&gt;&lt;li&gt;提供對應的使用者介面 (UI) 設定程式，包含 Ethernet 與 Touchscrren calibration UI&lt;/li&gt;&lt;li&gt;延續之前 &lt;a href=&quot;http://code.google.com/p/0xdroid/&quot;&gt;0xdroid&lt;/a&gt; 在 TI OMAP3 平台的&lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/Benchmarks&quot;&gt;效能改善成果&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span id=&quot;thread_subject_site&quot;&gt;近期內我們將會釋出新的 image installer，並持續改善 TI OMAP3 平台的 Android Eclair，而在今年的 &lt;a href=&quot;http://osdc.tw/&quot;&gt;OSDC.tw&lt;/a&gt; 研討會上，有個針對 &lt;/span&gt;&lt;a href=&quot;http://code.google.com/p/0xdroid/&quot;&gt;0xdroid&lt;/a&gt;&lt;span id=&quot;thread_subject_site&quot;&gt; 的議程，歡迎前來指教，也希望對 &lt;a href=&quot;http://0xlab.org/&quot;&gt;0xlab&lt;/a&gt; 一系列開放原始碼專案有興趣的朋友，可來 &lt;a href=&quot;http://groups.google.com/group/0xlab-devel&quot;&gt;0xlab-devel&lt;/a&gt; 郵件討論區參與討論，謝謝！&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1795333590425870072-6939371260469383300?l=jserv.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 10 Mar 2010 06:00:05 +0000</pubDate>
	<author>noreply@blogger.com (jserv)</author>
</item>
<item>
	<title>Asleep from Day » 0xlab: Ten Months</title>
	<guid permalink="False">http://asleepfromday.wordpress.com/?p=135</guid>
	<link>http://asleepfromday.wordpress.com/2010/02/23/ten-months/</link>
	<description>&lt;p&gt;Ten months ago when we just established 0xlab, we do have some ideas regarding our business model in mind. We cannot say exactly what it is, since we are under the constraint of NDA. However, I can roughly outline our goals and our progress here.&lt;/p&gt;
&lt;p&gt;In the world of open source, you gain credibility by contributing. The more credibility you have, the more powerful you become. Basically 0xlab&amp;#8217;s initial and first goal is to open up our development, establish our credibility and get more publicity. Our policy to open up as much as we can turns out to be more beneficial then we have expected. Since we put our code in the open, any individual or business entity who is interested in us can evaluate our results directly. This leads to direct communication channel to developers inside some big companies such as Google, Qualcomm (Innovation Center), Broadcom, TI, EMBINUX (SQL Star) and Motorola, or even cooperation in business level.&lt;/p&gt;
&lt;p&gt;We found out that since we don&amp;#8217;t sell software for a living, but instead we use software to add value to the hardware (made by AzureWave), the work we did is actually beneficial to our sponsor, so they are willing to keep supporting us. This means a lot (in my opinion), since nobody in Taiwan believes that people can write open source for a living, until we proved them wrong. I believe we&amp;#8217;re reproducing a ecosystem, which is not uncommon in Europe and US, but never shows up in Taiwan before.&lt;/p&gt;
&lt;p&gt;Since we can support ourselves now, what&amp;#8217;s the next step? I can&amp;#8217;t disclose it, but suffice to say we are planning to take this a step further. We hope, once we proved that business can make money from openness, more Taiwanese companies can understand and duplicate our open source model, thus creates more modern software developers and stay closer to the world.&lt;/p&gt;
&lt;br /&gt;Filed under: &lt;a href=&quot;http://asleepfromday.wordpress.com/category/0xlab/&quot;&gt;0xlab&lt;/a&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/asleepfromday.wordpress.com/135/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/asleepfromday.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/asleepfromday.wordpress.com/135/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/asleepfromday.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/asleepfromday.wordpress.com/135/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/asleepfromday.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/asleepfromday.wordpress.com/135/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/asleepfromday.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/asleepfromday.wordpress.com/135/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/asleepfromday.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=asleepfromday.wordpress.com&amp;blog=1401761&amp;post=135&amp;subd=asleepfromday&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 02:09:20 +0000</pubDate>
</item>
<item>
	<title>Reading, Writing and Arithmetic: New Bluetooth Object Push Profile in Android 2.0 (Eclair)</title>
	<guid>tag:blogger.com,1999:blog-6730068706524524033.post-6179883240715450099</guid>
	<link>http://i-miss-erin.blogspot.com/2010/02/new-bluetooth-object-push-profile-opp.html</link>
	<description>From Android developer website, they said &lt;a href=&quot;http://developer.android.com/sdk/android-2.0-highlights.html&quot;&gt;Android 2.0&lt;/a&gt; provides two new Bluetooth profiles: Object Push Profile (OPP) and Phone Book Access Profile (PBAP). Seeing is believing. Where is the meat? ha, I found they finally released their &lt;a href=&quot;http://android.git.kernel.org/?p=platform/packages/apps/Bluetooth.git;a=shortlog;h=refs/heads/eclair&quot;&gt;Bluetooth application&lt;/a&gt; source code. Therefore, I tried to verify OPP in Beagle board. :D&lt;br /&gt;&lt;br /&gt;As usual, I read &lt;a href=&quot;http://gitorious.org/0xdroid/pages/Build-from-Scratch&quot;&gt;Build-from-Scratch&lt;/a&gt; wiki page and download code from &lt;a href=&quot;http://gitorious.org/0xdroid&quot;&gt;0xdroid&lt;/a&gt; project with beagle-eclair branch. LIke beagle-donut, I can use USB mouse, keyboard, mount a SD sdcard, use USB networking, and then I turn Bluetooth on. It's very easy to set up the working environment with 0xdroid.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Check Bluetooth application source code and install it in Beagleboard&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cd packages/apps&lt;br /&gt;git clone git://android.git.kernel.org/platform/packages/apps/Bluetooth.git&lt;br /&gt;cd Bluetooth&lt;br /&gt;git checkout -b eclair remotes/origin/eclair&lt;br /&gt;git pull&lt;br /&gt;source ../../../build/envsetup.sh&lt;br /&gt;mm&lt;br /&gt;adb install ../../../out/target/product/beagleboard/system/app/Bluetooth.apk&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Trace related log&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;When we saw the log like below, it means it provides OPP service in RFCOMM channel 12 and PBAP service in RFCOMM channel 19.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;I/bluedroid(  736): Starting hciattach daemon&lt;br /&gt;I/bluedroid(  736): Starting bluetoothd deamon&lt;br /&gt;&lt;br /&gt;I/bluetooth_ScoSocket.cpp(  797): Listening SCO socket...&lt;br /&gt;V/BtOpp Service(  933): Service onCreate&lt;br /&gt;&lt;br /&gt;V/BtOpp Service(  933): Starting RfcommListener in 9 seconds&lt;br /&gt;V/BtOpp Service(  933): Service onStartCommand&lt;br /&gt;&lt;br /&gt;V/BluetoothPbapService(  933): Pbap Service onCreate&lt;br /&gt;V/BluetoothPbapService(  933): Starting PBAP service&lt;br /&gt;V/BluetoothPbapService(  933): Pbap Service onStartCommand&lt;br /&gt;&lt;br /&gt;D/BluetoothService(  736): Registering hfag record&lt;br /&gt;D/BluetoothService(  736): Registering opush record&lt;br /&gt;D/BluetoothService(  736): Registering pbap record&lt;br /&gt;&lt;br /&gt;V/BluetoothPbapService(  933): Handler(): got msg=1&lt;br /&gt;V/BluetoothPbapService(  933): Pbap Service startRfcommSocketListener&lt;br /&gt;V/BluetoothPbapService(  933): Pbap Service initSocket&lt;br /&gt;V/BluetoothPbapService(  933): Succeed to create listening socket on channel 19&lt;br /&gt;&lt;br /&gt;V/BtOpp Service(  933): start RfcommListener&lt;br /&gt;V/BtOpp Service(  933): RfcommListener started&lt;br /&gt;I/BtOppRfcommListener(  933): Accept thread started on channel 12&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Receiving and sending out data via Bluetooth&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Currently, it only accepts few media types, like image, video, audio, text/plain and text/html and it should have the extension name. It cannot accept vcard and vcalendar. But we can modify few lines in 'Bluetooth/src/com/android/bluetooth/opp/Constants.java  ', then it can store vcard files. One more problem, there is no matched application can view *.vcf file. I guess I can reference with previous &lt;a href=&quot;http://gitorious.org/0xdroid/packages_apps_bluetooth/commits/beagle-donut&quot;&gt;beagle-donut&lt;/a&gt; code to fix it. All incoming files are stored in /sdcard/bluetooth folder. Also, there is a db file to record all Bluetooth application  actions. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# cd /sdcard/bluetooth&lt;br /&gt;# ls&lt;br /&gt;08042009068.jpg&lt;br /&gt;08042009068-1.jpg&lt;br /&gt;&lt;br /&gt;# cd /data/data/com.android.bluetooth/databases&lt;br /&gt;# ls&lt;br /&gt;btopp.db&lt;br /&gt;# sqlite3 btopp.db&lt;br /&gt;SQLite version 3.5.9&lt;br /&gt;Enter &quot;.help&quot; for instructions&lt;br /&gt;sqlite&gt; .tables&lt;br /&gt;android_metadata  btopp           &lt;br /&gt;sqlite&gt; select * from btopp;&lt;br /&gt;1||08042009068.jpg||image/jpeg|1|00:18:C5:42:18:78|1|1|493|394450||946685154325|0&lt;br /&gt;2|content://media/external/images/media/1|08042009068.jpg|/sdcard/bluetooth/08042009068.jpg|image/jpeg|1|00:18:C5:42:18:78|1|1|200|394450|394450|946685200379|1&lt;br /&gt;3||olv.vcf|/sdcard/bluetooth/olv.vcf|text/x-vcard|1|00:18:C5:42:18:78|1|1|200|68|68|946685305125|2&lt;br /&gt;4|file:///sdcard/bluetooth/08042009068.jpg|08042009068.jpg||image/jpeg|0|00:18:C5:42:18:78|1|2|200|394450|394450|946685368037|0&lt;br /&gt;5||btopp_vcard.vcf|/sdcard/bluetooth/btopp_vcard.vcf|text/x-vcard|1|00:22:A5:B8:AD:65|1|1|496|168||946685701894|0&lt;br /&gt;6||btopp_vcard.vcf|/sdcard/bluetooth/btopp_vcard.vcf|text/x-vcard|1|00:22:A5:B8:AD:65|1|1|200|168|168|946685806848|2&lt;br /&gt;7||08042009068.jpg||image/jpeg|1|00:18:C5:42:18:78|1|4|490|394450||946698435289|0&lt;br /&gt;8||08042009068.jpg||image/jpeg|1|00:18:C5:42:18:78|1|4|490|394450||946698501841|0&lt;br /&gt;9|content://media/external/images/media/1|08042009068.jpg|/sdcard/bluetooth/08042009068.jpg|image/jpeg|1|00:18:C5:42:18:78|1|1|200|394450|394450|946698554454|1&lt;br /&gt;10|content://media/external/images/media/2|08042009068-1.jpg|/sdcard/bluetooth/08042009068-1.jpg|image/jpeg|1|00:18:C5:42:18:78|1|1|200|394450|394450|946698717592|1&lt;br /&gt;11|file:///sdcard/bluetooth/08042009068-1.jpg|08042009068-1.jpg||image/jpeg|0|00:22:A5:B8:AD:65|1|2|495|394450|0|946698901473|0&lt;br /&gt;12|content://media/external/images/media/2|08042009068-1.jpg||image/jpeg|0|00:18:C5:42:18:78|1|2|200|394450|394450|946699019695|0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Screenshots from beagle-eclair&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;* Turn Bluetooth On&lt;br /&gt;* Pair with Nokia N73 phone&lt;br /&gt;* Receive an image from N73 to Beagle board via BT&lt;br /&gt;* Send an image from Beagle board to N73 via BT&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;span&gt;&lt;a href=&quot;http://picasaweb.google.com/imisserin/AndroidBluetoothOPPInEclair?feat=flashalbum&quot;&gt;View all&lt;/a&gt;&lt;/span&gt;&lt;div&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/getEmbed?feat=flashalbum&quot;&gt;Get your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6730068706524524033-6179883240715450099?l=i-miss-erin.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 02 Feb 2010 01:08:20 +0000</pubDate>
	<author>icedventilatte17@gmail.com (erin)</author>
</item>
<item>
	<title>Reading, Writing and Arithmetic: Automated test in Android by Sikuli</title>
	<guid>tag:blogger.com,1999:blog-6730068706524524033.post-26731605756652977</guid>
	<link>http://i-miss-erin.blogspot.com/2010/01/automated-test-in-android-by-sikuli.html</link>
	<description>There is a very friendly and pretty cool project called '&lt;a href=&quot;http://sikuli.org/&quot;&gt;Sikuli&lt;/a&gt;' and the authors are from Taiwan too. What is Sikuli? I copy these texts from its website. Sikuli is a visual technology to search and automate graphical user interfaces (GUI) using images (screenshots). The first release of Sikuli contains Sikuli Script, a visual scripting API for Jython, and Sikuli IDE, an integrated development environment for writing visual scripts with screenshots easily. Sikuli Script automates anything you see on the screen without internal API's support. You can programmatically control a web page, a desktop application running on Windows/Linux/Mac OS X, or even an iphone application running in an emulator.&lt;br /&gt;&lt;br /&gt;How I use Sikuli for Android? Since we can catch things from screenshots, it means we can run Android emulator in my Ubuntu machine. Furthermore, I can run a vnc server in Android device, then run a vnc viewer in Ubuntu. Therefore, I can see Android HOME screen in my Desktop. What it can do for me? ha, it can run automated tests and then we don't need SQA to verify phone basic functionalities. Like detect GSM signal, dial out a phone call, enable Bluetooth, connect to WiFi hotspot....etc.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Launch Sikuli IDE editor in Ubuntu&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;wget http://sikuli.org/dl/Sikuli-IDE-linux-20100104.zip&lt;br /&gt;unzip Sikuli-IDE-linux-20100104.zip&lt;br /&gt;sh Sikuli-IDE/sikuli-ide.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_fB3UGiuVTOI/S11yU9i53lI/AAAAAAAAFqc/gsD9XWvSQRM/s1600-h/Screenshot-Sikuli+-+testDialer.sikuli.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_fB3UGiuVTOI/S11yU9i53lI/AAAAAAAAFqc/gsD9XWvSQRM/s400/Screenshot-Sikuli+-+testDialer.sikuli.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5430622430122597970&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Launch Android in Ubuntu&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is another tool &quot;&lt;a href=&quot;http://code.google.com/p/androidscreencast/&quot;&gt;androidscreencast&lt;/a&gt;&quot; I am using for this automated test. It can allow me to control my Android Dev phone remotely. We can have keyboard and mouse input! This is very important for Sikuli scripts, coz I can say &quot;Click&quot; something or &quot;type&quot; something. :)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;wget http://androidscreencast.googlecode.com/svn/trunk/AndroidScreencast/dist/androidscreencast.jnlp&lt;br /&gt;javaws androidscreencast.jnlp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/S11z4LHKdqI/AAAAAAAAFqk/SrWHw3VLmrE/s1600-h/Screenshot-HT93MLZ00561.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/S11z4LHKdqI/AAAAAAAAFqk/SrWHw3VLmrE/s400/Screenshot-HT93MLZ00561.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5430624134571390626&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's write some examples! Please check these draft videos!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span&gt;Build Sikuli in Ubuntu 9.10 (64 bit)&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;1. &lt;span&gt;download the source code&lt;/span&gt; (you'll need to install bzr, if you don't have it)&lt;br /&gt;&gt; bzr branch lp:sikuli&lt;br /&gt;&lt;br /&gt;2. &lt;span&gt;check java version&lt;/span&gt; (use java-6-sun)&lt;br /&gt;erin@midnight:~/code/sikuli$ file /etc/alternatives/java&lt;br /&gt;/etc/alternatives/java: symbolic link to `/usr/lib/jvm/java-6-sun/jre/bin/java'&lt;br /&gt;erin@midnight:~/code/sikuli$ file /etc/alternatives/javac&lt;br /&gt;/etc/alternatives/javac: symbolic link to `/usr/lib/jvm/java-1.5.0-sun/bin/javac'&lt;br /&gt;&lt;br /&gt;3. &lt;span&gt;install some libraries&lt;/span&gt; &lt;br /&gt;tesseract-ocr                   - Command line OCR tool&lt;br /&gt;tesseract-ocr-dev               - Development files for the tesseract command line OCR tool&lt;br /&gt;maven2                          - Java software project management and comprehension tool&lt;br /&gt;libcv1                          - computer vision library&lt;br /&gt;libcvaux1                       - computer vision extension library&lt;br /&gt;libhighgui1                     - computer vision GUI library&lt;br /&gt;&lt;br /&gt;4. &lt;span&gt;build code&lt;/span&gt;&lt;br /&gt;&gt;cd sikuli-script&lt;br /&gt;&gt;make&lt;br /&gt;&lt;br /&gt;g++ ScreenMatchProxy.o ocr-matcher.o template-matcher.o myocr.o screendiff.o  -o ../../../target/lib/libScreenMatchProxy.so    `pkg-config --libs opencv`  -shared -L/usr/local/lib -I/usr/lib/jvm/java-6-sun/lib -ltesseract_full -ltiff  &lt;br /&gt;/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/libtesseract_full.a(libtesseract_full.o): relocation R_X86_64_32 against `BLOCK_zapper(ELIST_LINK*)' can not be used when making a shared object; recompile with -fPIC&lt;br /&gt;/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/libtesseract_full.a: could not read symbols: Bad value&lt;br /&gt;collect2: ld returned 1 exit status&lt;br /&gt;make[1]: *** [../../../target/lib/libScreenMatchProxy.so] Error 1&lt;br /&gt;&lt;br /&gt;&lt;span&gt;how i solved&lt;/span&gt;: i removed -ltesseract_full, then rebuilt it!&lt;br /&gt;&gt;cd src/main/native/&lt;br /&gt;&gt;g++ ScreenMatchProxy.o ocr-matcher.o template-matcher.o myocr.o screendiff.o  -o ../../../target/lib/libScreenMatchProxy.so    `pkg-config --libs opencv`  -shared -L/usr/local/lib -I/usr/lib/jvm/java-6-sun/lib  -ltiff&lt;br /&gt;&lt;br /&gt;&gt;make install-jar (it would build sikuli-script.jar, that is what we need!)&lt;br /&gt;&gt;make release (it would build for all platforms, then zip to a file.)&lt;br /&gt;&lt;br /&gt;erin@midnight:~/project/sikuli/sikuli-script$ make release&lt;br /&gt;mkdir -p target/sikuli-script&lt;br /&gt;rm -rf target/sikuli-script/*&lt;br /&gt;cp target/sikuli-script.{bat,sh} target/sikuli-script&lt;br /&gt;cp: cannot stat `target/sikuli-script.{bat,sh}': No such file or directory&lt;br /&gt;make: *** [release] Error 1&lt;br /&gt;&lt;br /&gt;&lt;span&gt;how i solved&lt;/span&gt;: modify two lines in sikuli-script/Makefile and mkdir ../release&lt;br /&gt; cp target/sikuli-script.bat target/sikuli-script.sh $(RELEASE_TMP_PATH)&lt;br /&gt; cp -r $(LIB_PATH)/win32 $(LIB_PATH)/tmplib $(RELEASE_TMP_PATH)&lt;br /&gt;&lt;br /&gt;Done! you will find a zip file 'Sikuli-Script-all-20100128.zip' in release directory.&lt;br /&gt;&lt;br /&gt;&gt;cd sikuli-ide&lt;br /&gt;&gt;make install-jar&lt;br /&gt;&gt;make major-release&lt;br /&gt;&lt;br /&gt;Done! you will find a zip file 'Sikuli-IDE-linux-20100128.zip' in release directory. This one is like we download from Sikuli website for linux version.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6730068706524524033-26731605756652977?l=i-miss-erin.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 28 Jan 2010 01:29:32 +0000</pubDate>
	<author>icedventilatte17@gmail.com (erin)</author>
</item>
<item>
	<title>Reading, Writing and Arithmetic: Android Bluetooth in Eclair</title>
	<guid>tag:blogger.com,1999:blog-6730068706524524033.post-4018799428472599584</guid>
	<link>http://i-miss-erin.blogspot.com/2009/12/android-bluetooth-in-eclair.html</link>
	<description>&lt;a href=&quot;http://3.bp.blogspot.com/_fB3UGiuVTOI/SziZuwSVF5I/AAAAAAAAEsA/e0Bxycw4qr4/s1600-h/device.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_fB3UGiuVTOI/SziZuwSVF5I/AAAAAAAAEsA/e0Bxycw4qr4/s200/device.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5420251180055205778&quot; /&gt;&lt;/a&gt;&lt;br /&gt;If you noticed the source code in Eclair branch, you will find few differences in Bluetooth function. There are three new git repositories for bluetooth. &quot;bluez&quot;, &quot;glib&quot; and &quot;hcidump&quot;, all of them are located in /external/bluetooth folder, not /external/bluez anymore.&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;i&gt;bluez&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;android source: git://android.git.kernel.org/platform/external/bluetooth/bluez.git&lt;br /&gt;Eclair is using &lt;a href=&quot;http://www.kernel.org/pub/linux/bluetooth/bluez-4.47.tar.gz&quot;&gt;bluez version 4.47&lt;/a&gt; and the big difference would be &lt;a href=&quot;http://wiki.bluez.org/&quot;&gt;bluez API&lt;/a&gt;. Since it has a lot of changes between bluez3 (android 1.6) and bluez4 (Android 2.0), we can tell from the documents in &lt;a href=&quot;http://android.git.kernel.org/?p=platform/external/bluetooth/bluez.git;a=tree;f=doc;h=934cf29670cc7f99b5b2dae2270f5727d1a78a42;hb=eclair&quot;&gt;doc&lt;/a&gt; folder. Or we can use dbus-send to get the detailed information.&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;# dbus-send --system --type=method_call --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter&lt;br /&gt;method return sender=:1.2 -&gt; dest=:1.3&lt;br /&gt;   object path &quot;/org/bluez/932/hci0&quot;&lt;br /&gt;&lt;br /&gt;# dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/932/hci0 org.freedesktop.DBus.Introspectable.Introspect&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Also, bluetooth service name is changed in Eclair. It's &quot;bluetoothd&quot; now. Check &lt;a href=&quot;http://android.git.kernel.org/?p=platform/system/core.git;a=blob_plain;f=rootdir/init.rc;hb=refs/heads/eclair&quot;&gt;init.rc&lt;/a&gt; in /system/core/rootdir.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;service bluetoothd /system/bin/bluetoothd -d -n&lt;br /&gt;    socket bluetooth stream 660 bluetooth bluetooth&lt;br /&gt;    socket dbus_bluetooth stream 660 bluetooth bluetooth&lt;br /&gt;    # init.rc does not yet support applying capabilities, so run as root and&lt;br /&gt;    # let bluetoothd drop uid to bluetooth with the right linux capabilities&lt;br /&gt;    group bluetooth net_bt_admin misc&lt;br /&gt;    disabled&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;i&gt;glib&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;android source: git://android.git.kernel.org/platform/external/bluetooth/glib.git&lt;div&gt;When we build bluez library, it would build &lt;a href=&quot;http://library.gnome.org/devel/glib/&quot;&gt;glib&lt;/a&gt; as a static library.&lt;br /&gt;GLib provides the core application building blocks for libraries and applications written in C. It provides the core object system used in GNOME, the main loop implementation, and a large set of utility functions for strings and common data structures. If you are interested in how bluez use glib, you can trace bluez source code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;new Bluetooth API &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;http://developer.android.com/guide/topics/wireless/bluetooth.html&lt;/div&gt;&lt;div&gt;About Bluetooth, Android website has a very good &lt;a href=&quot;http://developer.android.com/guide/topics/wireless/bluetooth.html&quot;&gt;document&lt;/a&gt;. It lists the functions and example code.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Bluetooth&lt;br /&gt;    * Turn on/off Bluetooth&lt;br /&gt;    * Device and service discovery&lt;br /&gt;    * Connect to a remote device using RFCOMM and send/receive data&lt;br /&gt;    * Advertise RFCOMM services and listen for incoming RFCOMM connection&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Bluetooth Chat application&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;What I am curious? It's related to using RFCOMM and send/receive data. In the beginning, I am not quite understand and I thought it's OBEX. After running Bluetooth Chat application, I know what it means now. I installed 0xlab experimental eclair image in Beagle board and installed &lt;a href=&quot;http://developer.android.com/resources/samples/BluetoothChat/index.html&quot;&gt;Bluetooth chat example&lt;/a&gt; from Android. I also run a python script in my ubuntu machine and it's from &lt;a href=&quot;http://org.csail.mit.edu/pybluez/examples-0.6/rfcomm-client.txt&quot;&gt;pybluez&lt;/a&gt;. Then, I can chat between Beagle board and my laptop via Bluetooth. When we start to run Bluetooth Chat application, it would create a RFCOMM socket and set it to listen mode. We can retrieve the information from sdptool. Then other BT devices can connect to Android using RFCOMM protocol and set channel to the same one.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;# sdptool browse local&lt;br /&gt;Browsing FF:FF:FF:00:00:00 ...&lt;br /&gt;Service Name: BluetoothChat&lt;br /&gt;Service RecHandle: 0x10005&lt;br /&gt;Service Class ID List:&lt;br /&gt;  UUID 128: fa87c0d0-afac-11de-8a39-0800200c9a66&lt;br /&gt;Protocol Descriptor List:&lt;br /&gt;  &quot;L2CAP&quot; (0x0100)&lt;br /&gt;  &quot;RFCOMM&quot; (0x0003)&lt;br /&gt;    Channel: 30&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/zmAToQrndfxxk-nOHeCWHg?authkey=Gv1sRgCIyU-fSy-braFg&amp;feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_fB3UGiuVTOI/SziRUx2wRqI/AAAAAAAAErg/wRRjvkfS6q8/s800/chat.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href=&quot;http://picasaweb.google.com/imisserin/Collages?authkey=Gv1sRgCIyU-fSy-braFg&amp;feat=embedwebsite&quot;&gt;Collages&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6730068706524524033-4018799428472599584?l=i-miss-erin.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 28 Dec 2009 03:43:10 +0000</pubDate>
	<author>icedventilatte17@gmail.com (erin)</author>
</item>
<item>
	<title>olv: Android with 3D Effects</title>
	<guid>tag:blogger.com,1999:blog-3519606278200777308.post-5158650122475466580</guid>
	<link>http://olvaffe.blogspot.com/2009/12/android-with-3d-effects.html</link>
	<description>年終了。&lt;br /&gt;&lt;br /&gt;最近幾個月不知道為什麼，沒辦法專心工作。利用上 ptt 跟看漫畫的空檔，把說很久的特效弄出可以 demo 的樣子&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;感謝 &lt;a href=&quot;http://i-miss-erin.blogspot.com/&quot;&gt;Erin&lt;/a&gt; 的幫忙，這段影片展示了 Cube 跟 Fire 特效。 WindowManagerService 允許的地方都可以接特效，但現在只有接在程式啟動時。&lt;br /&gt;&lt;br /&gt;目前的進展可以在 &lt;a href=&quot;http://gitorious.org/android-eeepc/base/commits/effects&quot;&gt;gitorious&lt;/a&gt; 上取得。不過很顯然地，還有很多東西要弄。&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3519606278200777308-5158650122475466580?l=olvaffe.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 25 Dec 2009 17:04:31 +0000</pubDate>
	<author>olvaffe@gmail.com (olv)</author>
</item>
<item>
	<title>Passenger in the galaxy: Recently</title>
	<guid>tag:blogger.com,1999:blog-277868271843086990.post-1076558274276921120</guid>
	<link>http://jeremyone.blogspot.com/2009/12/recently.html</link>
	<description>Sometime I feel like I need to slow down my pace and my mind and now the time it is. Either for quiet thinking, intending to watch more or thinking about changing something.  As you can see, I am a lazy blogger and not a good writer.  Passion is the momentum for anything you want to do and it's the best gift.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are something about my work recently. Write it down here for arrangement.&lt;/div&gt;&lt;div&gt;It's about 0xdroid project. I have done implementing Camera HAL for usb camera. For this, I need to have some concept about V4L2 in kernel. It's related to V4L2 Video In.  Though camera is more complicated cause it can be greatly performance related when it comes to embedded device.  For most product design, the camera sensor module is connected with the camera interface of the SOC.  Thus in this manner, most cases there will be closed library provided by the SOC vendor for doing some effect control and performance related tasks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When doing video recording with the camera, colorspace conversion for encoding and for preview on the screen to make the acceptable frame rate is really critical, especially when the resolution is high.  Better situation will be more task can be handled by hardware.  For taking picture, it would be better if the hardware can do scaling and jpeg encoding, etc.  For previewing and video recording, it also would be cool if we don't need to do heavy colorspace conversion in host software side by hardware conversion(YUYV to YUV420(sp) or RGB) and Overlay support.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overlay is cooperated with V4L2 video out part. Overlay verifying and could be used by Camera HAL or multimedia video playback is important. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More ahead. Though I need to let myself know what's the value and getting prepared.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Off topic here in this post, most importantly, Glad and excited that we have a third release, beagle-donut-0x3.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/277868271843086990-1076558274276921120?l=jeremyone.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 19 Dec 2009 10:08:02 +0000</pubDate>
	<author>ShunYu.Chang@gmail.com (Jeremy)</author>
</item>
<item>
	<title>Reading, Writing and Arithmetic: 0xdroid beagle-donut-0x3 is released now!</title>
	<guid>tag:blogger.com,1999:blog-6730068706524524033.post-2124755287518353893</guid>
	<link>http://i-miss-erin.blogspot.com/2009/12/0xdroid-beagle-donut-0x3-is-released.html</link>
	<description>So exciting is our brand new release called '&lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/beagle_donut_0x3&quot;&gt;0xdroid beagle donut-0x3&lt;/a&gt;' that we forgot all about the coming bad weather in Taipei (raining, humid, and chill). This is our third released image for Beagle board in Android and it's based on Donut branch. If you have a beagle board on hand, you may give it a try. We provide a '&lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/UsingPreBuiltImages&quot;&gt;Happy installer&lt;/a&gt;' tool and it could give you a 'no pain no tears' good experiences on installing Android. Here is a 2 minutes &lt;a href=&quot;http://www.youtube.com/watch?v=6E8aS6wxZV0&quot;&gt;video&lt;/a&gt; in youtube based on real booting time! If you don't have any beagle board to see our work, you could take it a look from our released videos in youtube.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;What kind of meat we have this time?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Easy access to Internet through USB OTG network routed via host&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ethernet support + USB OTG network with default static IP configurations &lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/USB_Networking&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;Performance improvements&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dalvik VM + JIT compiler for ARMv7 &lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/Benchmarks&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ARM NEON optimizations for PixelFlinger &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=57&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;Theme Flexibility&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Theme selector introduced &lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/LauncherTheme&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Flexible resolution support for Launcher &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=29&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;More and better peripheral support&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;External GSM modem for functional Android Telephony/RIL &lt;a href=&quot;http://i-miss-erin.blogspot.com/2009/11/pick-up-phone-in-beagle-board.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Bluetooth OBEX OPush and FTP support &lt;a href=&quot;http://i-miss-erin.blogspot.com/2009/12/provide-bluetooth-ftp-profile-in.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Motion sensor support &lt;a href=&quot;http://matthsu-abacus.blogspot.com/2009/12/motion-sensor-demo-on-beagleboard.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Camera capture / recording &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=35&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;Stability improvements with several issues fixed&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dalvik stability fix &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=25&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Wifi signal strength with Linux Wireless Extension fix &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=28&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mouse stability fix &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=26&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;...&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Here is our &lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/Roadmap&quot;&gt;Roadmap&lt;/a&gt; about all these releases. If you have interest on particular item, you could get more information from our &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/list&quot;&gt;issue tracker&lt;/a&gt;. Furthermore, we welcome your feedback or any suggestion on &lt;a href=&quot;http://groups.google.com/group/0xlab-devel&quot;&gt;0xlab-devel&lt;/a&gt; mailing list!&lt;br /&gt;&lt;br /&gt;Frankly speaking, my favorite feature in this released image is neither Bluetooth Obex nor GSM modem, what I like most is our &lt;a href=&quot;http://code.google.com/p/0xdroid/wiki/LauncherTheme&quot;&gt;theme launcher&lt;/a&gt;. It has a Christmas theme inside. This theme is our best wishes. Wish everyone have a Merry Christmas and a Happy New Year!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/Syu3pRYT3_I/AAAAAAAAEpw/8BlgsDtT_JM/s1600-h/0xdroid_xmas_1.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/Syu3pRYT3_I/AAAAAAAAEpw/8BlgsDtT_JM/s400/0xdroid_xmas_1.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416624896511041522&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/Syu3pRYT3_I/AAAAAAAAEpw/8BlgsDtT_JM/s1600-h/0xdroid_xmas_1.png&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_fB3UGiuVTOI/Syu3o2RmdYI/AAAAAAAAEpo/vWf4gENUtxw/s1600-h/0xdroid_xmas_2.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_fB3UGiuVTOI/Syu3o2RmdYI/AAAAAAAAEpo/vWf4gENUtxw/s400/0xdroid_xmas_2.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416624889235142018&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6730068706524524033-2124755287518353893?l=i-miss-erin.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 18 Dec 2009 20:01:06 +0000</pubDate>
	<author>icedventilatte17@gmail.com (erin)</author>
</item>
<item>
	<title>Abacus: Motion Sensor Demo on Beagleboard</title>
	<guid>tag:blogger.com,1999:blog-8469912421183119143.post-3641214318614045562</guid>
	<link>http://matthsu-abacus.blogspot.com/2009/12/motion-sensor-demo-on-beagleboard.html</link>
	<description>If you saw my previous post, it was mentioned my next step is to integrate this 3-axis accelerometer into Android. To prove my implementation could work flawlessly, I ask my colleague, &lt;a href=&quot;http://jeremyone.blogspot.com/&quot;&gt;Jeremy&lt;/a&gt; to record the following clip.&lt;br /&gt;&lt;br /&gt;The demo application is called 3D Level.&lt;br /&gt;&lt;br /&gt;The HAL implementation could be found here:&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/hardware_libhardware&quot;&gt;http://gitorious.org/0xdroid/hardware_libhardware&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's based on Michael's porting on Android for Openmoko GTA02.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8469912421183119143-3641214318614045562?l=matthsu-abacus.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 10 Dec 2009 03:17:03 +0000</pubDate>
	<author>MattHsu1016@gmail.com (Matt)</author>
</item>
<item>
	<title>Hacking at 0xlab: libacc : Android 2.0 內建的輕量級 C Compiler</title>
	<guid>tag:blogger.com,1999:blog-1795333590425870072.post-1933577827077806583</guid>
	<link>http://jserv.blogspot.com/2009/12/libacc-android-20-c-compiler.html</link>
	<description>Android 2.0 (Eclair) 原始程式碼已於一個月前釋出，在目錄 system/core 下有個 libacc 的子項目，這是開發者修改自 Fabrice Bellard 的大作 &lt;a href=&quot;http://fabrice.bellard.free.fr/otcc/&quot;&gt;OTCC (Obfuscated Tiny C Compiler)&lt;/a&gt;，以 C++ 與 Android 的執行時期函式庫重寫。libacc 的功能是提供給 Android 2.0 的 RenderScript 一個 C-like 語法的描述，如此一來，開發者可撰寫高效能的視覺效果與動畫，不過這部份並未完成，詳情可參考 &quot;&lt;a href=&quot;http://www.inter-fuser.com/2009/11/android-renderscript-more-info-and.html&quot;&gt;Android renderscript, more info' and an example application&lt;/a&gt;&quot; 一文。&lt;br /&gt;&lt;br /&gt;關於 libacc 的整合部份，可參考 frameworks/base/libs/rs 目錄下的兩個檔案：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;rsScriptC.cpp&lt;/li&gt;&lt;li&gt;rsScriptC_Lib.cpp&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;筆者準備了一份可單獨執行於 GNU/Linux 環境的套件：&quot;&lt;a href=&quot;http://0xlab.org/%7Ejserv/libacc.tar.bz2&quot;&gt;libacc.tar.bz2&lt;/a&gt;&quot;，除去 Android 的相依性並補上 Makefile，測試方式如下：&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;libacc$ make&lt;br /&gt;g++ -I./include -DHAVE_PTHREADS -c acc.cpp&lt;br /&gt;gcc -I./include -DHAVE_PTHREADS -c hashmap.c&lt;br /&gt;gcc -I./include -DHAVE_PTHREADS -c logd_write.c&lt;br /&gt;g++ -I./include -DHAVE_PTHREADS -c tests/main.cpp&lt;br /&gt;g++ -I./include -DHAVE_PTHREADS -c tests/runtimeTest.cpp&lt;br /&gt;g++ -o main \&lt;br /&gt;  acc.o \&lt;br /&gt;  hashmap.o \&lt;br /&gt;  logd_write.o \&lt;br /&gt;  main.o \&lt;br /&gt;  -ldl&lt;br /&gt;g++ -o runtimeTest \&lt;br /&gt;  acc.o \&lt;br /&gt;  hashmap.o \&lt;br /&gt;  logd_write.o \&lt;br /&gt;  runtimeTest.o \&lt;br /&gt;  -ldl&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;libacc 的 Code generator 支援以下硬體架構：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;x86 / IA32&lt;/li&gt;&lt;li&gt;x86_64&lt;/li&gt;&lt;li&gt;ARMv5&lt;/li&gt;&lt;/ul&gt;以 IA32 的環境為例，可透過測試程式來驗證 libacc： (參數 -R 表示作執行的動作)&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;libacc$ ./main -R tests/data/hello.c&lt;br /&gt;Executing compiled code:&lt;br /&gt;Hello, world&lt;br /&gt;result: 0&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;其中 tests/data/hello.c 的內容為：&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;libacc$ cat tests/data/hello.c&lt;br /&gt;int main() {&lt;br /&gt;printf(&quot;Hello, world\n&quot;);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;若平台是 ARM 的話，還可以支援反組譯輸出，libacc 是 RenderScript 背後很重要的基礎建設，允許動態編譯 Android Graphics 的 RenderScript，輸出成機械碼並執行。參考檔案 tests/runtimeTest.cpp 可得知 RenderScript 的寫法，整個 libacc 可內嵌於程式中，比方說：&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;const char* text = &quot;void op_int(int a);\n&quot;&lt;br /&gt;   &quot;void op_float12(float a, float b, float c, float d,\n&quot;                   &lt;br /&gt;   &quot;           float e, float f, float g, float h,\n&quot;&lt;br /&gt;   &quot;           float i, float j, float k, float l);\n&quot;&lt;br /&gt;   &quot;void script() {\n&quot;&lt;br /&gt;   &quot;  globalVar += 3;\n&quot;&lt;br /&gt;   &quot;  op_int(123);\n&quot;&lt;br /&gt;   &quot;  op_float12(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);\n&quot;&lt;br /&gt;   &quot;}\n&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;這個字串經過 libacc 的函式呼叫後，可得到以下的編譯與執行結果：&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;libacc$ ./runtimeTest&lt;br /&gt;Executing script:&lt;br /&gt;op_int(123)&lt;br /&gt;op_float12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)&lt;br /&gt;After script globalVar = 20&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;目錄 tests 還包含可在 Android 環境執行的自動測試 Python script。&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1795333590425870072-1933577827077806583?l=jserv.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 09 Dec 2009 17:23:03 +0000</pubDate>
	<author>noreply@blogger.com (jserv)</author>
</item>
<item>
	<title>Abacus: Build 3-axis Accelerometer on Beagleboard from Scratch</title>
	<guid>tag:blogger.com,1999:blog-8469912421183119143.post-3119835837779052849</guid>
	<link>http://matthsu-abacus.blogspot.com/2009/11/build-3-axis-accelerometer-on.html</link>
	<description>First of all, I would like to thanks Jerry, who is the project manager from STMicroelectronic Taiwan branch. He sponsored 0xlab couple chips of LIS302DL, which is a 3-axis accelerometer device. And Neo (YOSUN's FAE) provides me a fixture for this device. So everything is ready for me to make it work on the Beagleboard.&lt;br /&gt;&lt;br /&gt;- &lt;a href=&quot;http://www.st.com/stonline/products/literature/ds/12726.pdf&quot;&gt;LIS302DL&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_YkjZ-0s1Rbg/SxTsgDVsb_I/AAAAAAAAABM/7miDXbGhUUY/s1600/dscf1100.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_YkjZ-0s1Rbg/SxTsgDVsb_I/AAAAAAAAABM/7miDXbGhUUY/s320/dscf1100.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410209087775076338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;You probably feel it is looked familiar. Yes, this chip is the same motion sensor as Openmoko Freerunner used. The only difference is that its interface would be adopted I2C instead of 3-wire SPI for Beagleboard.&lt;br /&gt;&lt;cite&gt;&lt;/cite&gt;&lt;br /&gt;- Power source for LIS302DL&lt;br /&gt;If you probe the schematic of Beagleboard, the expansion header (J3) reserved DC 5v and VIO 1v8 respectively. You can leverage these as the power source for your own devices. Unfortunately, the range of Vdd for LIS302DL is located between 2v16 and 3v6. DC 5v is not fulfilled for this case. So tinker DC 5v is needed. Zerner diode can regulator the voltage as you want. In this case, one reistor and one zerner diode are required.&lt;br /&gt;&lt;br /&gt;- &lt;a href=&quot;http://focus.ti.com/docs/prod/folders/print/txs0102.html&quot;&gt;TSX0102&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_YkjZ-0s1Rbg/SxTysvSnYPI/AAAAAAAAABc/bmukWmyp_pw/s1600/dscf1102.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_YkjZ-0s1Rbg/SxTysvSnYPI/AAAAAAAAABc/bmukWmyp_pw/s320/dscf1102.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410215902801518834&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;It's very Beagleboard specific or you can say it's TI specific. If you want to add an external device on the Beagleboard, a voltage level translator might be necessity. Since most of current devices, the least signaling I/O would be around 2v6. But Beagleboard only provides 1v8 voltage as I/O signaling. The real reason behind this I don't know about it. Maybe for the power consumption issue. Or can I call it's a kind of &quot;product placement&quot;? :p&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Interrupt&lt;br /&gt;Basically, all the I/O to the host controller, Beagleboard, are based on 1v8 signaling. The I2C communication is through TXS0102 to talk between host and device. But there is one more line for one-directional signaling, that is interrupt from LIS302DL to host. My former colleague, Dkay, suggested a simple approach to reslove this. A diode and two pull high resistors would be enough&lt;a href=&quot;http://4.bp.blogspot.com/_YkjZ-0s1Rbg/SxXpJ1CtTTI/AAAAAAAAABk/EZ_q7MPhVCw/s1600-h/int.jpeg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_YkjZ-0s1Rbg/SxXpJ1CtTTI/AAAAAAAAABk/EZ_q7MPhVCw/s320/int.jpeg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410486882422050098&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- Kernel driver&lt;br /&gt;The corresponding kernel driver is put here:&lt;br /&gt;&lt;br /&gt;http://gitorious.org/0xlab-kernel/kernel&lt;br /&gt;&lt;br /&gt;Edit your kernel config with CONFIG_INPUT_ST_MOTION_SENSOR=y.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following picture is the overall picture for this work. Although it's not pretty, but it works perfectly. With evtest utility, I can retrieve input events from LIS302DL device.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_YkjZ-0s1Rbg/SxXsaexxs6I/AAAAAAAAABs/L2AxJfpteAs/s1600-h/dscf1125.jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_YkjZ-0s1Rbg/SxXsaexxs6I/AAAAAAAAABs/L2AxJfpteAs/s320/dscf1125.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410490467038114722&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;programlisting&quot;&gt;&lt;br /&gt;# ./evtest /dev/input/event1&lt;br /&gt;Input driver version is 1.0.0&lt;br /&gt;Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0&lt;br /&gt;Input device name: &quot;LIS302DL Motion Sensor&quot;&lt;br /&gt;Supported events:&lt;br /&gt;Event type 0 (Sync)&lt;br /&gt;Event type 3 (Absolute)&lt;br /&gt;Event code 0 (X)&lt;br /&gt;Value      3&lt;br /&gt;Min        0&lt;br /&gt;Max        0&lt;br /&gt;Event code 1 (Y)&lt;br /&gt;Value    245&lt;br /&gt;Min        0&lt;br /&gt;Max        0&lt;br /&gt;Event code 2 (Z)&lt;br /&gt;Value     56&lt;br /&gt;Min        0&lt;br /&gt;Max        0&lt;br /&gt;Testing ... (interrupt to exit)&lt;br /&gt;Event: time 12.269714, type 3 (Absolute), code 0 (X), value 4&lt;br /&gt;Event: time 12.269989, type 3 (Absolute), code 1 (Y), value 245&lt;br /&gt;Event: time 12.270233, type 3 (Absolute), code 2 (Z), value 55&lt;br /&gt;Event: time 12.270233, -------------- Report Sync ------------&lt;br /&gt;Event: time 12.273864, type 3 (Absolute), code 0 (X), value 3&lt;br /&gt;Event: time 12.274200, type 3 (Absolute), code 2 (Z), value 56&lt;br /&gt;Event: time 12.274200, -------------- Report Sync ------------&lt;br /&gt;Event: time 12.284332, type 3 (Absolute), code 0 (X), value 4&lt;br /&gt;Event: time 12.284545, type 3 (Absolute), code 1 (Y), value 244&lt;br /&gt;Event: time 12.284698, -------------- Report Sync ------------&lt;br /&gt;Event: time 12.294403, type 3 (Absolute), code 0 (X), value 3&lt;br /&gt;Event: time 12.294799, type 3 (Absolute), code 2 (Z), value 55&lt;br /&gt;Event: time 12.294799, -------------- Report Sync ------------&lt;br /&gt;Event: time 12.304840, type 3 (Absolute), code 1 (Y), value 245&lt;br /&gt;Event: time 12.305023, -------------- Report Sync ------------&lt;br /&gt;Event: time 12.315063, type 3 (Absolute), code 1 (Y), value 244&lt;br /&gt;Event: time 12.315277, type 3 (Absolute), code 2 (Z), value 56&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So, what's the next? Making it integrated into Android would be a good idea.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8469912421183119143-3119835837779052849?l=matthsu-abacus.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 02 Dec 2009 18:40:06 +0000</pubDate>
	<author>MattHsu1016@gmail.com (Matt)</author>
</item>
<item>
	<title>Reading, Writing and Arithmetic: Provide Bluetooth FTP profile in Android</title>
	<guid>tag:blogger.com,1999:blog-6730068706524524033.post-3168539966104850163</guid>
	<link>http://i-miss-erin.blogspot.com/2009/12/provide-bluetooth-ftp-profile-in.html</link>
	<description>About providing Bluetooth FTP &amp;amp; OPP profile &lt;a href=&quot;http://code.google.com/p/0xdroid/issues/detail?id=49&quot;&gt;issue&lt;/a&gt;, I've merged all related source code to &lt;a href=&quot;http://gitorious.org/0xdroid/pages/Home&quot;&gt;0xdroid&lt;/a&gt; begle-donut branch. I verified these two services in both Beagle board and Android Dev phone. It looks good now.&lt;br /&gt;&lt;br /&gt;When we turn BT on, we start '&lt;a href=&quot;http://gitorious.org/0xdroid/system_bluetooth/commit/96177c3d7789168856b755b4ba8f8b633c4c5be5&quot;&gt;obex-client&lt;/a&gt;' service in the background. It would register a record to &lt;a href=&quot;http://wiki.bluez.org/wiki/Database&quot;&gt;SDP server&lt;/a&gt; in &lt;a href=&quot;http://wiki.bluez.org/&quot;&gt;bluez&lt;/a&gt; and then other BT devices can find we provide this service. How it looks like? We provide channel 7 for FTP. Other BT device can browse our file system using rfcomm. They can pull data from us, modify file name, delete file, or push data to us. Below it's FTP record in SDP database:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Service Name: File Transfer server&lt;br /&gt;Service RecHandle: 0x10003&lt;br /&gt;Service Class ID List:&lt;br /&gt;&quot;OBEX File Transfer&quot; (0x1106)&lt;br /&gt;Protocol Descriptor List:&lt;br /&gt;&quot;L2CAP&quot; (0x0100)&lt;br /&gt;&quot;RFCOMM&quot; (0x0003)&lt;br /&gt;Channel: 7&lt;br /&gt;&quot;OBEX&quot; (0x0008)&lt;br /&gt;Profile Descriptor List:&lt;br /&gt;&quot;OBEX File Transfer&quot; (0x1106)&lt;br /&gt;Version: 0x0100&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/SxY72aN4fRI/AAAAAAAAEZs/FJyxqpEJw0s/s1600-h/device0.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/SxY72aN4fRI/AAAAAAAAEZs/FJyxqpEJw0s/s200/device0.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410577808268754194&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/SxY72GItEHI/AAAAAAAAEZk/NF2pvaBMh2k/s1600-h/device12.png&quot;&gt; &lt;img src=&quot;http://2.bp.blogspot.com/_fB3UGiuVTOI/SxY72GItEHI/AAAAAAAAEZk/NF2pvaBMh2k/s200/device12.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410577802878324850&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_fB3UGiuVTOI/SxY71yS5vJI/AAAAAAAAEZc/gr-LJRlR8G4/s1600-h/device11.png&quot;&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_fB3UGiuVTOI/SxY71yS5vJI/AAAAAAAAEZc/gr-LJRlR8G4/s1600-h/device11.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_fB3UGiuVTOI/SxY71yS5vJI/AAAAAAAAEZc/gr-LJRlR8G4/s200/device11.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410577797552389266&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://4.bp.blogspot.com/_fB3UGiuVTOI/SxY71qRVueI/AAAAAAAAEZU/KrWAvglnjjU/s1600-h/device1.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_fB3UGiuVTOI/SxY71qRVueI/AAAAAAAAEZU/KrWAvglnjjU/s200/device1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5410577795398351330&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's explain it and trace the source code.&lt;br /&gt;Eg. &lt;span&gt;CreateSession&lt;/span&gt; method call in &lt;a href=&quot;http://gitorious.org/0xdroid/external_obexd/blobs/beagle-donut/doc/client-api.txt&quot;&gt;obex-client dbus API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How we connect obex-client with Bluetooth UI? [using &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Native_Interface&quot;&gt;JNI&lt;/a&gt;, &lt;a href=&quot;http://developer.android.com/guide/developing/tools/aidl.html#implementing&quot;&gt;aidl&lt;/a&gt;, and &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/dbus&quot;&gt;d-bus&lt;/a&gt;]&lt;br /&gt;We register a FTP service from AndroidRuntime. We also create few methods and it's based on obex client &lt;a href=&quot;http://gitorious.org/0xdroid/external_obexd/blobs/beagle-donut/doc/client-api.txt&quot;&gt;API&lt;/a&gt; document. Below texts are related source code:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/frameworks_base/blobs/beagle-donut/core/jni/AndroidRuntime.cpp&quot;&gt;AndroidRuntime.cpp&lt;/a&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;REG_JNI(register_android_server_BluetoothFtpService),&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/frameworks_base/blobs/beagle-donut/core/jni/android_server_BluetoothFtpService.cpp&quot;&gt;android_server_BluetoothFtpService.cpp&lt;/a&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;int register_android_server_BluetoothFtpService(JNIEnv *env)&lt;br /&gt;{&lt;br /&gt;  jclass clazz = env-&gt;FindClass(&quot;android/server/BluetoothFtpService&quot;);&lt;br /&gt;&lt;br /&gt;  method_onCreateSessionComplete = env-&gt;GetMethodID( clazz, &quot;onCreateSessionComplete&quot;, &quot;(Ljava/lang/String;Ljava/lang/String;Z)V&quot; );&lt;br /&gt;  method_onChangeFolderComplete = env-&gt;GetMethodID( clazz, &quot;onChangeFolderComplete&quot;, &quot;(Ljava/lang/String;Ljava/lang/String;Z)V&quot; );&lt;br /&gt;  &lt;br /&gt;  return AndroidRuntime::registerNativeMethods(env,&lt;br /&gt;         &quot;android/server/BluetoothFtpService&quot;, sMethods, NELEM(sMethods));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Below text is the &lt;span&gt;sequence&lt;/span&gt; from UI to native code and then back to UI.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/packages_apps_bluetooth/blobs/beagle-donut/src/com/quicinc/bluetooth/RemoteFileManagerActivity.java&quot;&gt;RemoteFileManagerActivity.java&lt;/a&gt; &lt;span&gt;(Pick up one device from remote tab in Bluetooth UI)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;public boolean onOptionsItemSelected(MenuItem item) {&lt;br /&gt;  // Intent intent;&lt;br /&gt;  switch (item.getItemId()) {&lt;br /&gt;  case MENU_SELECT_SERVER:&lt;br /&gt;       if (mFTPClient.isConnectionActive()) {&lt;br /&gt;           Toast.makeText(this, R.string.error_ftp_connect_timeout, Toast.LENGTH_LONG).show();&lt;br /&gt;       } else {&lt;br /&gt;          /* Connect to Server */&lt;br /&gt;           handleServerSelect();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;public void handleServerSelect() {&lt;br /&gt;  mDirectoryButtons.removeAllViews();&lt;br /&gt;  currentDirectory = &quot;/&quot;;&lt;br /&gt;  if (mContext.isBluetoothEnabled()) {&lt;br /&gt;      Intent intent = new Intent(getApplicationContext(), BluetoothDevicePicker.class);&lt;br /&gt;      intent.setAction(BluetoothAppIntent.ACTION_SELECT_BLUETOOTH_DEVICE);&lt;br /&gt;      intent.putExtra(BluetoothAppIntent.PROFILE, BluetoothAppIntent.PROFILE_FTP);&lt;br /&gt;      intent.setData(Uri.parse(&quot;file://&quot; + currentDirectory));&lt;br /&gt;      try {&lt;br /&gt;          startActivityForResult(intent, SUBACTIVITY_PICK_BT_DEVICE);&lt;br /&gt;      } catch (ActivityNotFoundException e) {&lt;br /&gt;          Log.e(TAG, &quot;No Activity for : &quot; + BluetoothAppIntent.ACTION_SELECT_BLUETOOTH_DEVICE, e);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void onActivityResult(int requestCode, int resultCode, Intent data) {&lt;br /&gt;  super.onActivityResult(requestCode, resultCode, data);&lt;br /&gt;&lt;br /&gt;  switch (requestCode) {&lt;br /&gt;  case SUBACTIVITY_PICK_BT_DEVICE:&lt;br /&gt;      if (resultCode == RESULT_OK &amp;amp;&amp;amp; data != null) {&lt;br /&gt;          /* Obtain the Server name and Address */&lt;br /&gt;          String serverAddress = data.getStringExtra(BluetoothDevicePicker.ADDRESS);&lt;br /&gt;          String serverName = data.getStringExtra(BluetoothDevicePicker.NAME);&lt;br /&gt;          if (mFTPClient != null) {&lt;br /&gt;              mFTPClient.setAddress(serverAddress);&lt;br /&gt;              mFTPClient.setName(serverName);&lt;br /&gt;                  mServerConnectButtonLayout.setVisibility(View.GONE);&lt;br /&gt;              if(mFTPClient.createSession() != true) {&lt;br /&gt;                   String szStr = getResources().getString(R.string.ftp_connect_failed, mFTPClient.getName());&lt;br /&gt;                   Toast.makeText(this, szStr, Toast.LENGTH_LONG).show();&lt;br /&gt;                   updateServerStatus();&lt;br /&gt;              } else {&lt;br /&gt;                   String szStr = getResources().getString(R.string.ftp_connect_device, mFTPClient.getName());&lt;br /&gt;                   showBusy(mFTPClient.getName(), szStr);&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;      break;&lt;br /&gt;  }&lt;br /&gt;} /* onActivityResult */&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/frameworks_base/blobs/beagle-donut/core/java/android/server/BluetoothFtpService.java&quot;&gt;BluetoothFtpService.java&lt;/a&gt; &lt;span&gt;(handle from Android Frameworks)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;public synchronized boolean createSession(String address, IBluetoothFtpCallback callback) {&lt;br /&gt;  /*&lt;br /&gt;   * Need to register callback before calling native code&lt;br /&gt;   * (which could potentially call callback)&lt;br /&gt;   */&lt;br /&gt;  BluetoothObexDatabase.SessionDbItem dbItem =&lt;br /&gt;          mSessionDb.new SessionDbItem(address,null,callback);&lt;br /&gt;  mSessionDb.insert(dbItem);&lt;br /&gt;&lt;br /&gt;  boolean ret = createSessionNative(address);&lt;br /&gt;&lt;br /&gt;  if (!ret) {&lt;br /&gt;      mSessionDb.deleteByAddress(address);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return ret;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/frameworks_base/blobs/beagle-donut/core/jni/android_server_BluetoothFtpService.cpp&quot;&gt;android_server_BluetoothFtpService.cpp&lt;/a&gt; &lt;span&gt;(use JNI and send a dbus method call to obex-client)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt; &lt;br /&gt;static jboolean createSessionNative(JNIEnv* env, jobject object, jstring address  )&lt;br /&gt;{&lt;br /&gt;DBusMessage *msg = dbus_message_new_method_call(OBEXD_DBUS_CLIENT_SVC,&lt;br /&gt;                                              OBEXD_DBUS_CLIENT_PATH,&lt;br /&gt;                                              OBEXD_DBUS_CLIENT_IFC,&lt;br /&gt;                                              OBEXD_DBUS_CLIENT_CREATE);&lt;br /&gt;&lt;br /&gt;pending = (dbus_async_call_t *) malloc(sizeof(dbus_async_call_t));&lt;br /&gt;if (pending)&lt;br /&gt;{&lt;br /&gt;DBusPendingCall *call;&lt;br /&gt;char *context_address =  (char *) calloc(BTADDR_SIZE,&lt;br /&gt;                                         sizeof(char));&lt;br /&gt;strlcpy(context_address, c_address, BTADDR_SIZE);  // for callback&lt;br /&gt;pending-&gt;env = env;&lt;br /&gt;pending-&gt;user_cb = onCreateSessionComplete;&lt;br /&gt;pending-&gt;user = context_address;&lt;br /&gt;pending-&gt;nat = nat;&lt;br /&gt;dbus_bool_t reply = dbus_connection_send_with_reply(nat-&gt;conn,&lt;br /&gt;                                                    msg,&lt;br /&gt;                                                    &amp;amp;call,&lt;br /&gt;                                                    10*1000);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/external_obexd/blobs/beagle-donut/client/main.c&quot;&gt;/external/obexd/client/main.c&lt;/a&gt; &lt;span&gt;(handle from obex-client)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;static DBusMessage *create_session(DBusConnection *connection,&lt;br /&gt;     DBusMessage *message, void *user_data)&lt;br /&gt;{&lt;br /&gt; if (session_create(source, dest, target, create_callback, data) == 0)&lt;br /&gt;  return NULL;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/external_obexd/blobs/beagle-donut/client/session.c&quot;&gt;/external/obexd/client/session.c&lt;/a&gt; &lt;span&gt;(use rfcomm to connect with specific channel )&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;int session_create(const char *source,&lt;br /&gt;   const char *destination, const char *target,&lt;br /&gt;    session_callback_t function, void *user_data)&lt;br /&gt;{&lt;br /&gt; if (session-&gt;channel &gt; 0) {&lt;br /&gt;  err = rfcomm_connect(&amp;amp;session-&gt;src, &amp;amp;session-&gt;dst,&lt;br /&gt;    session-&gt;channel, rfcomm_callback, callback);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/frameworks_base/blobs/beagle-donut/core/jni/android_server_BluetoothFtpService.cpp&quot;&gt;android_server_BluetoothFtpService.cpp&lt;/a&gt; &lt;span&gt;(we get the callback!)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt; &lt;br /&gt;static void onCreateSessionComplete(DBusMessage *msg, void *user, void *nat_cb)&lt;br /&gt;{&lt;br /&gt;char* c_address = (char *)user;&lt;br /&gt;JNIEnv *env = NULL;&lt;br /&gt;nat-&gt;vm-&gt;GetEnv((void**)&amp;amp;env, nat-&gt;envVer);&lt;br /&gt;jstring address = env-&gt;NewStringUTF(c_address);&lt;br /&gt;&lt;br /&gt;env-&gt;CallVoidMethod(nat-&gt;me,&lt;br /&gt;                    method_onCreateSessionComplete,&lt;br /&gt;                    obj_path,&lt;br /&gt;                    address,&lt;br /&gt;                    is_error);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/packages_apps_bluetooth/blobs/beagle-donut/src/com/quicinc/bluetooth/BluetoothFTPClient.java&quot;&gt;BluetoothFTPClient.java&lt;/a&gt; &lt;span&gt;(handle from Bluetooth UI)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;public void onCreateSessionComplete(boolean isError) {&lt;br /&gt;   Message msg = Message.obtain();&lt;br /&gt;   msg.what = TYPE_CREATE_SESSION_COMPLETE;&lt;br /&gt;   Bundle b = new Bundle();&lt;br /&gt;   b.putBoolean(&quot;isError&quot;, isError);&lt;br /&gt;   msg.obj = b;&lt;br /&gt;   mHandler.sendMessage(msg);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://gitorious.org/0xdroid/packages_apps_bluetooth/blobs/beagle-donut/src/com/quicinc/bluetooth/RemoteFileManagerActivity.java&quot;&gt;RemoteFileManagerActivity.java&lt;/a&gt; &lt;span&gt;(device is connected, going to refresh panel to display Remote file system)&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;public void onCreateSessionComplete(boolean isError) {&lt;br /&gt;mSessionCreated = !isError;&lt;br /&gt;hideBusy();&lt;br /&gt;if (mFTPClient != null) {&lt;br /&gt;    if (isError == false) {&lt;br /&gt;        mContext.onServerConnected();&lt;br /&gt;        goHomeDir();&lt;br /&gt;    } else {&lt;br /&gt;        String szStr = getResources().getString(R.string.ftp_connect_failed, mFTPClient.getName());&lt;br /&gt;        Toast.makeText(this, szStr, Toast.LENGTH_LONG).show();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;updateServerStatus();&lt;br /&gt;refreshDirectoryPanel();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://lh4.ggpht.com/_fB3UGiuVTOI/SxZG9PLtLAI/AAAAAAAAEaM/tsdzT4FE-Bs/s912/FTP.jpg&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/_fB3UGiuVTOI/SxZG9PLtLAI/AAAAAAAAEaM/tsdzT4FE-Bs/s912/FTP.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6730068706524524033-3168539966104850163?l=i-miss-erin.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 02 Dec 2009 02:54:29 +0000</pubDate>
	<author>icedventilatte17@gmail.com (erin)</author>
</item>

</channel>
</rss>
