FAQ for the Franklin eBookMan® SDK



Specs Bundled Apps Hardware GUI GDB


 
Specs


What are the maximum values of heap and stack?
There is no limit per se, other than the limit of the RAM on the eBookMan device, which depending on the model is currently 8MB or 16MB. A rough guide is to set it to be twice more than what you expect your application to need. One word of caution: if you set it close to 8MB and your program has a memory leak, as it uses up the 8MB, your application will grind the device to a halt.

Can you elaborate on the eBookMan® DRM? What are SEB files?
SEB stands for Secure E-Bookman file, and it is the extension of every file that is downloaded into eBookMan®. An SEB file holds either an application or data. An SEB file has at least one 4K byte header, which contains a series of attributes. Attributes are name/value pairs, e.g. PUBLISHER=FRANKLIN. The eBookMan® supports a number of types for "SEB" files:

How are applications switched between, by the user?
The user can press the "Home" icon (in the simulator, it is the topmost of the two icons in the lower left-hand corner), which puts the application into background, and brings the launcher up to the foreground. The user can then select another application to run. If the user at some later point comes back to the original application, it just brings it to the foreground. From this application's view, it receives a message of type MSG_OS_NOTIFY, with the data field being NTFY_BACKGROUND or NTFY_FOREGROUND. Pressing the "Home" icon does not exit the application. To do that, user must choose exit (which all applications are encouraged to offer in the "File" menu).

I cannot find the API for accessing the audio on eBookMan.
The piezo API appears under the OS documentation. We are completing the API for accessing the audio drivers.

Is there a utility for generating eBookMan database files on the PC?
Not yet. We are developing it.

Is there a "sleep" function?
We have a usleep function that sleeps a thread for x microseconds. The call is: #include <l4/ipc.h> usleep(x); Even though the sleep is specified in microseconds, we have a granularity of 4 milliseconds.

Will other languages/platforms be available (e.g. Java, Linux, VisualBasic)?
We are considering implementing more available languages when we complete the Franklin version.

How do I open a file inside my application?
Add an entry for my_file in initial.mom and then use the "ebo_mapin()" function inside your application to access my_file. Documentation for "ebo_mapin()" is in doc/api/libebo/html/ebm_object.h.html.

How do I handle opening multiple databases in my application?
When an application uses multiple databases, each database needs to be loaded into a different part of the virtual memory available for your applications. Because eBookManOS doesn't prevent you from clobbering multiple databases that belong to your application, if you have multiple databases, you need to be careful and stay aware of how much memory remains. The first database can be opened with mapinAddr=OS_availaddr [variable OS_availaddr is the first available memory address defined for your convenience by the OS], but the second database needs to start at an address that you absolutely know will not be reached by any growth in your first database. Since you get a 1GB virtual memory space, this shouldn't present a problem. For example, suppose you expect your first database to be no bigger than 1MB. Be safe and call it 3MB. Then, when you open your second database, use mapinAddr=OS_availaddr+3000000.

return to top

Bundled Apps


Does the Outlook synchronization include supports for e-mail account?
We do not have an e-mail client on the device at shipment. We are planning on providing e-mail support after shipment.

What are the differences between Franklin Viewer and Franklin Reader?
Franklin Reader displays FUB files (Franklin's proprietary format). It was designed as a workhorse for reference materials and supports sophisticated features necessary for such texts, such as indexing, spell correction, search, and bookmarks. Franklin Viewer displays files in .TXT, .HTML and Palm's DOC formats.

Is there any desktop software that comes with the eBookMan?
There is a desktop manager which guides/controls the sync process. It has not been released yet.

return to top

Hardware


What hardware/silk-screen buttons are there?
The silk-screen on the unit is just like the lower part of the simulator. There are the "Home" and "Menu" icons, the handwriting area (subdivided into 3 parts) and there is the navigational scroll bar for moving up/down/left/right within the application. There is also a jog wheel on the side of the unit with 5 positions: 2 up, 2 down, and one depressed (enter). These appear on the left hand side of the simulator window.

What are the eBookMan®'s dimensions and weight?
3.39 inches long by 5.17 inches wide by 0.67 inches thick. The weight is 6 1/2 ounces.

Does the eBookMan® use standard batteries? What is the expected battery life? Do rechargeables work?
eBookMan® uses 2 standard AAA batteries. Battery life will vary depending on use. Rechargeable NiCad batteries will not work; rechargeable alkaline batteries should work.

return to top

GUI


How is the precedence of drawing determined?
Child objects in a window are drawn in the order they were added. If the objects are overlaid, the first object added will be displayed "behind" later objects (as discussed in the Programmers Guide).

If you override CWindow::Draw, anything you draw before calling DrawChildren will appear behind the children. Anything you draw in an override to CWindow::UserBackground will appear behind anything in CWindow::Draw.

If you draw something in a window outside the CWindow::Draw routine, it will be erased by the next CWindow::Draw.

When should I use Close() and when should I use Hide()?
CWindow::Close calls CWindow::Hide. You should close a window when you are done with it, to free up its memory. Use Hide if you want to take the window off the screen without throwing away its contents.

Do all GUI apps need to have the OS code linked in or does eBookManOS support shared libraries (DLL's)?
Right now you need to link in the OS code. We will work on enabling DLLs after the product ships.

Is the GUI source provided, so that developers can modify/customize the user interface?
GUI source is provided because without it, debugging can be rather difficult, since most apps interact rather closely with the GUI. You can certainly define your own classes and thereby provide a totally custom interface.

return to top

GDB


How do I create a new application?
The easiest way of doing this is to make a copy of the /gui/test directory. In the copied directory, you need to change the 2 references to "testapp" and "test.cpp" in the Makefile and all references to "test" and "testapp" in the initial.mom file. See the "Getting Started" document.

When I run GDB, I see only assembly code in my source window
On the bottom of the source window in GDB, there are multiple pull-down menu boxes which control what and how the source window displays. The first is for selecting the file, the second for selecting the function and the third is for selecting source mode. One of the choices in the third box is "source".

When the simulator first starts, it is showing operating system code that was written in Assembly. Press "continue" (under GDB) or set a break in GUI_main and press "continue" (under sGDB) to run the simulation until it gets to a part of the program for which source code is available.

When I press the "Menu" icon in the simulator, nothing happens.
If you are running ./sGDB, the key F2 is equivalent to pressing the "Menu" icon. There is no equivalent to pressing the "Home" icon in the simulator, since you are running in the stand-alone mode, with nothing other than your program being simulated. If you are running ./GDB, both the "Menu" and the "Home" icon work (if a bit slow).

The "display" command in console window isn't working properly, I cannot seem to display many of the variables. I get lots of "Error: No symbol xxx in current context" in my console window in response to "display" commands.
Check your Makefile. If the CFLAGS variable contains "-O2" option, optimization is turned on. When optimization is on, not enough information gets saved in the .coff file to allow for proper debugging in the gdb. Delete the "-O2" from your Makefile, do "make clean", then "make", and then try running ./GDB. Note that when you do "make" without optimization, you may get a long series of "Optimize pass" messages in you shell, followed by "*** Warning: Optimization is not converging to stable segment sizes". These are expected.

return to top