http://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&feed=atom&action=historySymbian Orbiter Programmer's Guide - Revision history2024-03-29T13:44:30ZRevision history for this page on the wikiMediaWiki 1.24.1http://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&diff=23792&oldid=prevMarie.o: LinuxMCE Orbiter Symbian Programmer's Guide moved to Symbian Orbiter Programmer's Guide2010-05-17T16:22:01Z<p>LinuxMCE Orbiter Symbian Programmer's Guide moved to Symbian Orbiter Programmer's Guide</p>
<table class='diff diff-contentalign-left'>
<tr style='vertical-align: top;'>
<td colspan='1' style="background-color: white; color:black; text-align: center;">←Older revision</td>
<td colspan='1' style="background-color: white; color:black; text-align: center;">Revision as of 16:22, 17 May 2010</td>
</tr><tr><td colspan='2' style='text-align: center;'><div class="mw-diff-empty">(No difference)</div>
</td></tr></table>Marie.ohttp://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&diff=23504&oldid=prevWierdbeard65 at 10:09, 5 May 20102010-05-05T10:09:35Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 10:09, 5 May 2010</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">{{versioninfo}}</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Category: Programmer's Guide]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Category: Programmer's Guide]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Category: Phones]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Category: Phones]]</div></td></tr>
</table>Wierdbeard65http://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&diff=9161&oldid=prevRwilson131 at 18:51, 24 February 20082008-02-24T18:51:24Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 18:51, 24 February 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 4:</td>
<td colspan="2" class="diff-lineno">Line 4:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Category: Symbian Series 60 mobile]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Category: Symbian Series 60 mobile]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>There are many models of phones, using many different operating systems with varying capabilities.  We wanted to make it very quick and easy to add support for all these phones, whether they use Symbian C++, Java, or some proprietary language.  Our goal was also to use the same code that runs on the Linux, Windows, and Windows CE Orbiters, so that all the logic and functionality is one place.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>There are many models of phones, using many different operating systems with varying capabilities.  We wanted to make it very quick and easy to add support for all these phones, whether they use Symbian C++, Java, or some proprietary language.  Our goal was also to use the same code that runs on the Linux, Windows, and Windows CE Orbiters, so that all the logic and functionality is one place.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>Of course, it's not possible for the mobile phones to run Orbiter directly.  So, we created a DCE Device, "Bluetooth Dongle".  This runs on the media director and is responsible for interfacing with the bluetooth system.  It runs on both Linux, using Bluez, and Windows.  When a Bluetooth mobile phone comes within range, the Bluetooth Dongle creates a bi-directional communications link with the phone using our BD library.  Bluetooth Dongle then spawns internally a copy of Orbiter for the phone.  This is the exact same Orbiter code that runs on the PDA's, web pads, and the Linux desktop.  The Orbiter program was already designed so that almost all the code is in shared base classes, and there is only a small class that handles the rendering the output and capturing input (i/o) for the target operating system (Windows, X, etc.).  So, the Orbiter that is spawned internally within Bluetooth Dongle has a different i/o class--one that instead of rendering to the screen, creates a "Show Image" command which it sends to the phone via the BD processor.  And instead of getting input via the touchscreen or mouse, it gets input from the phone via the BD processor.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>This means that the software running on the phone itself is very small and simple, since it is effectively only a 'dumb terminal'.  The real Orbiter is running on the Linux or Windows pc, rendering each screen, all the text, the data-grids, etc., and just feeding the rendered output to the phone to display.  By taking this approach we are able to use almost any phone as an Orbiter, even if it doesn't have enough 'horsepower' to run a real user interface.  Also, the code on the phone is short and simple so it should be easy to target other phones.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Of course, it's not possible for the mobile phones to run Orbiter directly.  So, we created a DCE Device, "Bluetooth Dongle".  This runs on the media director and is responsible for interfacing with the bluetooth system.  It runs on both Linux, using Bluez, and Windows.  When a Bluetooth mobile phone comes within range, the Bluetooth Dongle creates a bi-directional communications link with the phone using our BD library.  Bluetooth Dongle then spawns internally a copy of Orbiter for the phone.  This is the exact same Orbiter code that runs on the PDA's, web pads, and the Linux desktop.  The Orbiter program was already designed so that almost all the code is in shared base classes, and there is only a small class that handles the rendering the output and capturing input (i/o) for the target operating system (Windows, X, etc.).  So, the Orbiter that is spawned internally within Bluetooth Dongle has a different i/o class--one that instead of rendering to the screen, creates a "Show Image" command which it sends to the phone via the BD processor.  And instead of getting input via the touchscreen or mouse, it gets input from the phone via the BD processor.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>The BD library, which encapsulates the bi-directional communication used between the phone and the pc, is written in ansi c++.  Symbian phones use Symbian C++, which is proprietary and different from regular ansi C++.  Yet we figured the code would be much more maintainable if the phone was running the same BD library that the pc runs.  So rather than writing a new BD library for Symbian C++, we focused on writing macros and classes that allow Symbian C++ to compile and execute ansi C++ code.  In some cases, this meant writing macros to translate ansi C++ into Symbian C++.  For example, rather than using the ansi C++ stl "list" template, we created macros which, when compiled under an ansi C++ compiler translate to stl lists, and under Symbian C++ translate into Symbian's proprietary list mechanism.  Sometimes we had to write our own Symbian C++ code to provide functionality that was missing in Symbian C++.  For example, we wrote our own 'string' class for Symbian that mimics the functionality of the ansi C++ string.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>Hopefully, these macros and classes will work across all the various Symbian flavors, although we wrote the code for Series 60 phones.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>This means that the software running on the phone itself is very small and simple, since it is effectively only a 'dumb terminal'.  The real Orbiter is running on the Linux or Windows pc, rendering each screen, all the text, the data-grids, etc., and just feeding the rendered output to the phone to display.  By taking this approach we are able to use almost any phone as an Orbiter, even if it doesn't have enough 'horsepower' to run a real user interface.  Also, the code on the phone is short and simple so it should be easy to target other phones.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p><b></del>If you want to run the software on other phones<del class="diffchange diffchange-inline"></b> </del>there are only 2 places where the code may be different for the other versions of Symbian. The first is the low-level Bluetooth code in BD, and the second is in the Render Menu, which handles putting graphics on the screen and receiving input.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project.  All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.<del class="diffchange diffchange-inline"><p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The BD library, which encapsulates the bi-directional communication used between the phone and the pc, is written in ansi c++.  Symbian phones use Symbian C++, which is proprietary and different from regular ansi C++.  Yet we figured the code would be much more maintainable if the phone was running the same BD library that the pc runs.  So rather than writing a new BD library for Symbian C++, we focused on writing macros and classes that allow Symbian C++ to compile and execute ansi C++ code.  In some cases, this meant writing macros to translate ansi C++ into Symbian C++.  For example, rather than using the ansi C++ stl "list" template, we created macros which, when compiled under an ansi C++ compiler translate to stl lists, and under Symbian C++ translate into Symbian's proprietary list mechanism.  Sometimes we had to write our own Symbian C++ code to provide functionality that was missing in Symbian C++.  For example, we wrote our own 'string' class for Symbian that mimics the functionality of the ansi C++ string.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline"><p></del>Then look at the <del class="diffchange diffchange-inline">LinuxMCEMO </del>project, which has our Symbian Series 60 project.  In the source there is a file PlutoVMCUtil.cpp.  This implements the drawing and input.  All the logic is in the cross-platform base classes, but this file handles the OS-specific part.<del class="diffchange diffchange-inline"></p></del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Hopefully, these macros and classes will work across all the various Symbian flavors, although we wrote the code for Series 60 phones.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">'''</ins>If you want to run the software on other phones<ins class="diffchange diffchange-inline">''' </ins>there are only 2 places where the code may be different for the other versions of Symbian. The first is the low-level Bluetooth code in BD, and the second is in the Render Menu, which handles putting graphics on the screen and receiving input.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project.  All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Then look at the <ins class="diffchange diffchange-inline">LinuxMCE MO </ins>project, which has our Symbian Series 60 project.  In the source there is a file PlutoVMCUtil.cpp.  This implements the drawing and input.  All the logic is in the cross-platform base classes, but this file handles the OS-specific part.</div></td></tr>
</table>Rwilson131http://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&diff=6378&oldid=prevZaerc: moved categories2007-10-05T13:54:48Z<p>moved categories</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 13:54, 5 October 2007</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category: Programmer's Guide]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category: Phones]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category: Orbiters]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category: Symbian Series 60 mobile]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>There are many models of phones, using many different operating systems with varying capabilities.  We wanted to make it very quick and easy to add support for all these phones, whether they use Symbian C++, Java, or some proprietary language.  Our goal was also to use the same code that runs on the Linux, Windows, and Windows CE Orbiters, so that all the logic and functionality is one place.</p></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>There are many models of phones, using many different operating systems with varying capabilities.  We wanted to make it very quick and easy to add support for all these phones, whether they use Symbian C++, Java, or some proprietary language.  Our goal was also to use the same code that runs on the Linux, Windows, and Windows CE Orbiters, so that all the logic and functionality is one place.</p></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>Of course, it's not possible for the mobile phones to run Orbiter directly.  So, we created a DCE Device, "Bluetooth Dongle".  This runs on the media director and is responsible for interfacing with the bluetooth system.  It runs on both Linux, using Bluez, and Windows.  When a Bluetooth mobile phone comes within range, the Bluetooth Dongle creates a bi-directional communications link with the phone using our BD library.  Bluetooth Dongle then spawns internally a copy of Orbiter for the phone.  This is the exact same Orbiter code that runs on the PDA's, web pads, and the Linux desktop.  The Orbiter program was already designed so that almost all the code is in shared base classes, and there is only a small class that handles the rendering the output and capturing input (i/o) for the target operating system (Windows, X, etc.).  So, the Orbiter that is spawned internally within Bluetooth Dongle has a different i/o class--one that instead of rendering to the screen, creates a "Show Image" command which it sends to the phone via the BD processor.  And instead of getting input via the touchscreen or mouse, it gets input from the phone via the BD processor.</p></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>Of course, it's not possible for the mobile phones to run Orbiter directly.  So, we created a DCE Device, "Bluetooth Dongle".  This runs on the media director and is responsible for interfacing with the bluetooth system.  It runs on both Linux, using Bluez, and Windows.  When a Bluetooth mobile phone comes within range, the Bluetooth Dongle creates a bi-directional communications link with the phone using our BD library.  Bluetooth Dongle then spawns internally a copy of Orbiter for the phone.  This is the exact same Orbiter code that runs on the PDA's, web pads, and the Linux desktop.  The Orbiter program was already designed so that almost all the code is in shared base classes, and there is only a small class that handles the rendering the output and capturing input (i/o) for the target operating system (Windows, X, etc.).  So, the Orbiter that is spawned internally within Bluetooth Dongle has a different i/o class--one that instead of rendering to the screen, creates a "Show Image" command which it sends to the phone via the BD processor.  And instead of getting input via the touchscreen or mouse, it gets input from the phone via the BD processor.</p></div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 7:</td>
<td colspan="2" class="diff-lineno">Line 12:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project.  All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.<p></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project.  All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.<p></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>Then look at the LinuxMCEMO project, which has our Symbian Series 60 project.  In the source there is a file PlutoVMCUtil.cpp.  This implements the drawing and input.  All the logic is in the cross-platform base classes, but this file handles the OS-specific part.</p></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>Then look at the LinuxMCEMO project, which has our Symbian Series 60 project.  In the source there is a file PlutoVMCUtil.cpp.  This implements the drawing and input.  All the logic is in the cross-platform base classes, but this file handles the OS-specific part.</p></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">[[Category:Orbiters]]</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">[[Category:Programmer's Guide]]</del></div></td><td colspan="2"> </td></tr>
</table>Zaerchttp://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&diff=6208&oldid=prevLozzo at 03:05, 1 October 20072007-10-01T03:05:02Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revision as of 03:05, 1 October 2007</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 7:</td>
<td colspan="2" class="diff-lineno">Line 7:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project.  All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.<p></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project.  All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.<p></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>Then look at the LinuxMCEMO project, which has our Symbian Series 60 project.  In the source there is a file PlutoVMCUtil.cpp.  This implements the drawing and input.  All the logic is in the cross-platform base classes, but this file handles the OS-specific part.</p></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><p>Then look at the LinuxMCEMO project, which has our Symbian Series 60 project.  In the source there is a file PlutoVMCUtil.cpp.  This implements the drawing and input.  All the logic is in the cross-platform base classes, but this file handles the OS-specific part.</p></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category:Orbiters]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category:Programmer's Guide]]</ins></div></td></tr>
</table>Lozzohttp://wiki.linuxmce.org/index.php?title=Symbian_Orbiter_Programmer%27s_Guide&diff=3294&oldid=prevJuliet at 10:21, 16 March 20072007-03-16T10:21:35Z<p></p>
<p><b>New page</b></p><div><p>There are many models of phones, using many different operating systems with varying capabilities. We wanted to make it very quick and easy to add support for all these phones, whether they use Symbian C++, Java, or some proprietary language. Our goal was also to use the same code that runs on the Linux, Windows, and Windows CE Orbiters, so that all the logic and functionality is one place.</p><br />
<p>Of course, it's not possible for the mobile phones to run Orbiter directly. So, we created a DCE Device, "Bluetooth Dongle". This runs on the media director and is responsible for interfacing with the bluetooth system. It runs on both Linux, using Bluez, and Windows. When a Bluetooth mobile phone comes within range, the Bluetooth Dongle creates a bi-directional communications link with the phone using our BD library. Bluetooth Dongle then spawns internally a copy of Orbiter for the phone. This is the exact same Orbiter code that runs on the PDA's, web pads, and the Linux desktop. The Orbiter program was already designed so that almost all the code is in shared base classes, and there is only a small class that handles the rendering the output and capturing input (i/o) for the target operating system (Windows, X, etc.). So, the Orbiter that is spawned internally within Bluetooth Dongle has a different i/o class--one that instead of rendering to the screen, creates a "Show Image" command which it sends to the phone via the BD processor. And instead of getting input via the touchscreen or mouse, it gets input from the phone via the BD processor.</p><br />
<p>This means that the software running on the phone itself is very small and simple, since it is effectively only a 'dumb terminal'. The real Orbiter is running on the Linux or Windows pc, rendering each screen, all the text, the data-grids, etc., and just feeding the rendered output to the phone to display. By taking this approach we are able to use almost any phone as an Orbiter, even if it doesn't have enough 'horsepower' to run a real user interface. Also, the code on the phone is short and simple so it should be easy to target other phones.</p><br />
<p>The BD library, which encapsulates the bi-directional communication used between the phone and the pc, is written in ansi c++. Symbian phones use Symbian C++, which is proprietary and different from regular ansi C++. Yet we figured the code would be much more maintainable if the phone was running the same BD library that the pc runs. So rather than writing a new BD library for Symbian C++, we focused on writing macros and classes that allow Symbian C++ to compile and execute ansi C++ code. In some cases, this meant writing macros to translate ansi C++ into Symbian C++. For example, rather than using the ansi C++ stl "list" template, we created macros which, when compiled under an ansi C++ compiler translate to stl lists, and under Symbian C++ translate into Symbian's proprietary list mechanism. Sometimes we had to write our own Symbian C++ code to provide functionality that was missing in Symbian C++. For example, we wrote our own 'string' class for Symbian that mimics the functionality of the ansi C++ string.</p><br />
<p>Hopefully, these macros and classes will work across all the various Symbian flavors, although we wrote the code for Series 60 phones.</p><br />
<p><b>If you want to run the software on other phones</b> there are only 2 places where the code may be different for the other versions of Symbian. The first is the low-level Bluetooth code in BD, and the second is in the Render Menu, which handles putting graphics on the screen and receiving input.</p><br />
<p>For the Bluetooth code, see the files BDCommandProcessor_Symbian_Bluetooth.cpp and BDCommandProcessor_Symbian_Base.cpp file in the BD project. All the logic is in the cross-platform base classes, but these 2 handle the actual sending and receiving data.<p><br />
<p>Then look at the LinuxMCEMO project, which has our Symbian Series 60 project. In the source there is a file PlutoVMCUtil.cpp. This implements the drawing and input. All the logic is in the cross-platform base classes, but this file handles the OS-specific part.</p></div>Juliet