Dongleberry pictures

The RIM Blackberry pager has a serial port on the bottom. All of the Palm peripherals are serial. So I constructed an adapter to let me connect these things together. Some will probably work, some will probably not for various reasons.

My initial hope was to write software for the Kodak PalmPix camera. Spent a few days documenting the serial protocol but then I ran into a snag because of a proprietary picture format. You may visit here to see the PalmPix protocol.

Here are some pictures of the Dongleberry. As you can see it is constructed by surgically mating a RIM cable connector and The Bridge for Palm III. I'll write up the wiring once I ring out my latest prototype. Essentially I just wired it one to one, except that I wound up also shunting DSR & CTS since the GoType expects to get power from CTS which the RIM doesn't supply. Though I don't expect anyone to build one for themselves since there is nothing you can use it for as of yet. Heck I don't even know if I will ever solve the THUMB_ROLL_UP issue above which would suck since what good is a keyboard if you can't move the cursor.

Back Front

Other Projects

Really this is just a hobby. It would be very interesting to see this taken to an extreme and have the PalmPix, Palm folding keyboard, Happy Hacking Cradle, Palm modem, etc etc working on a Blackberry. There doesn't appear to be a physical limitation, just a lack of motivation, or in the case of Kodak -- complete and utter apathy towards developers.

GoType Palm Portable Keyboard


Keyberry is a keyboard driver for use with the Dongleberry adapter (see above). It currently supports three types of keyboards; any keyboard compatible with the Happy Hacking Cradle, the GoType keyboard and I just added support for the Palm Portable Keyboard.

The Palm keyboard was actually a pain to add because I had to add some components to the Dongleberry. You see the Palm keyboard relies on the +3.3V (pin 2) which I needed to add to the Dongleberry by cutting down the DTR signal by a few volts. In addition, it is finicky about the power up timing; such that you must power the +3.3V approximately .25 seconds before the DTR power. Ugh! So I cheesed it by making a sample-hold with a capacitor and I bounced the signal to allow the capacitor to supply a +3.3V signal during the DTR off duration. It seems to work reliably and even though I just used diodes to reduce the +6V to +3.3V I am not worried about RS232 variations since the Dongleberry only plugs into the RIM's proprietary connector which always provides +6V on DTR.

If I had to choose between these options I would definitely pick the GoType. I thought the GoType was a turd with the PalmPilot but with the Blackberry it really rocks. You'll get used to the small keys because they are sensitive and the fact that it is sturdy means you can carry it on your lap (well almost). The Palm keyboard was a bit of a disappointment at first, but now that I'm used to it I like it the best. Of course the Happy Hacking Cradle is a dream because you can use any old PC keyboard, but it is mostly impractical because of the cable and full-size keyboard you'll be using.

Dongleberry Wiring

Disclaimer: I am only a hobbyist. I am not responsible for damage to your Blackberry or other devices. If you have any doubts about this wiring please either ask me or get a second opinion from an electrical engineer (which I am not). Make sure you test your connector before attaching it to any valuable devices (i.e. Blackberry). Lots of stuff could be wrong; bad etching on The Bridge (happened to me), reverse wiring, etc etc.

Keep in mind that "Palm edge" refers to signal names that are present on a Palm peripheral. We are NOT mating the Blackberry to the Palm, but rather we are mating it to Palm peripherals. So the 10 pin signals I refer to as "Palm edge" are ones that you would find on the Palm cradle for instance. Yes confusing, but basically it just means that we are trying to emulate a Palm's signals so that they will plug into Palm peripherals and so the signals are named from a peripheral standpoint rather than from the Palm's.

Also take care to recognize the position of pin 1 on each connector. I have marked them on one of the above pictures of the Dongleberry.

These are self explanatory:

Blackberry              Palm edge
1&14 (GND)    <-->      10 (GND)
5 (RXD)       <---      3 (TXD)
3 (TXD)       --->      5 (RXD)

Okay this is weird. Normally DTR would be hooked to the Blackberry's DSR. But I like to plug the Dongleberry into my Palm III cradle to use programmer.exe and the Palm cradle does _not_ have a DTR signal. So I use the next best thing which is RTS.

Blackberry              Palm edge
4 (DSR)       <---      6 (RTS)

The Blackberry supplies +6V on DTR. The GoType uses Palm's DTR and RTS for power, actually it probably only uses RTS since the Palm's DTR is non-standard and cannot be turned off. Blackberry doesn't have RTS signal so I just use DTR for both DTR and RTS.

Blackberry              Palm edge
2 (DTR)       --->      1&4 (DSR & CTS)

This final mess is optional. It was only added to get the Palm Portable Keyboard (PPK) to work. It does two things, it makes a +3.3V (approx) signal for pin 2 of the Palm edge. And it provides a way to hold a charge for a second or so on this pin so that I can create the power up timing required for the PPK.

Blackberry                                             Palm edge
2 (DTR) -- four .7 signal diodes -->|-->|-->|-->|---   2 (+3.3V)
                                                 === 100uF capacitor
1 (GND) -------------------------------------------


  • v1.3.2 - Just a timing change on the DTR bounce to make it work more reliably for the 100uF cap. My old adapter has a 220uF because I was too lazy to go to the store so I didn't notice that the timing was too far off.

Source (v1.3.2):


I must admit that when I got my RIM950 I worked feverishly to get a base of software written. I found the default software to be too limiting, or in the 950 case it didn't even come with software -- besides the Message and Address book. So the first thing was to write a Date book application.

For the Palm I wrote a program called HotDate which allowed you to navigate your appointments. I wished I had it on the RIM, and after a few weeks of porting the code my wish came true. Now I use it for everything.. it is the control center for my RIM. Though I am still adding mundane features to it (stuff is hard-coded for my prefs) and regrettably I must weed out some licensed code before I can release it.

Not available yet.


GPL licensed free software.

Sparrow is a message application that is similar to the built-in messaging software. There is nothing particularly wrong with the built-in RIM message application, it just doesn't work very well for me. I find the header listing to be confusing since it interleaves day markers in the list, and it wastes too much screen just to show an envelope icon. I wanted something that was more pleasant such as my xfmail software which I run on my desktop; i.e. folders and colorizing.

Folders; I receive lots of mail so I need folders to separate the entertainment and fluff from the really important stuff. That's what folders do, you configure a header field string rule (or several) and it lets you view a list of matching records. In addition you can set a different tone/vibrate notification for each folder. So far so good, the main screen shows the folders and their total and unread message counts.

I've been using this long enough and it seems okay.. so I'm now building binaries into the distribution. There are bound to still be issues, one in particular which I run into every now and again whereby the message counts are incorrect. I intend to put work-arounds (i.e. the Recalculate counts menu option) in place until such time that these bugs can be corrected.

Development on Sparrow is slowing down a bit since I don't find that I need much more to get my work done. In fact if I had one thing that I would spend some time on it would be to make a new screen saver that showed the specific information that I always manually request on the pager. Something like a mixture of Nasdaq, Dow, portfolio, and perhaps news headlines and slashdot headlines. I figure an easy way would be to first mock up a replacement screen saver, and then add a list of items which can be programmed via a special email. Furthermore, I would like to get somewhere in hacking the go.web browser so that I can force it to view a particular URL.

A further note. There really is no documentation on this project other than this page and the FAQ link on the right. Of course you can look through the source code and find my comments if you have any questions about how this works. Please realize that this software was written out of neccessity and not intended to spawn any particular commercial interest. As such I have no plans to make it anything other than a stable and useful piece of software.. so don't be surprised if my interests fade a bit and I move on to other things once Sparrow works how *I* want. ABSOLUTELY NO WARRANTY.


  • v1.9.6 - Added support for the latest Service Pack 3, which uses BB 2.0.22 and message.dll 2.0.004. Note: I also tried to move the icon closer to the left on the ribbon, but RibbonRegisterApplication() ignores positions < 21. Oh well, can't fault it for that -- it's the way it's supposed to work.
  • v1.9.7 - RIM 962 fixup. AutoText fixup for 850 - fixes compose mail and draft.
  • v1.9.8 - Use 't' and 'b' in message list for top and bottom. Changed 'n' and 'p' behavior in channel view so that it cycles folders. Added a RIM 950 1.7 build.
  • v1.9.9 - Avi Freedman's super delete functionality added, though not quite complete yet. I have reports of Sparrow sometimes hanging during sends. This is on Blackberry 2.0 devices so I have no way to test it. I would appreciate if a developer with a BB 2.0 device could install sdkradio.dll on their device and step through the send_the_draft() function and determine where it hangs so that I can implement a work-around. Thanks.
  • v1.9.10 - There was a bug in my send_the_draft() which always made the recipient type be zero. This may have been the cause of intermittent send failures.
  • v1.9.11 - Bug fix for the folder listing. The DatabaseSortedListView on my old 950 OS had a bug in the ::update function. Well, it turns out that in the BB OS they fixed the bug.. and therefore my work-around is not needed. Thanks to David James for finding it. Also from now on I am using the /opt:nowin98 link optimization which reduces the size of binaries.
  • v1.9.12 - I used my pager while on vacation going up the east coast. I was out of coverage nearly the entire time, and at my destination I had a flaky 1 bar signal. I must admit that the email portion of the pager was pretty resilient; messages would trickle in, and I could compose and send messages without having reception which was great. But the Go.Web part, or rather my applications based on GwRimLib were really flaky. This was because I had to be in coverage during the whole request/receive session, unlike the way the email works. This means I will probably switch over to using email based services for that stuff. Anyways, this version is a few fixes which were brought to my attention while I was gone; thanks to David James for the page fault fix, and Kevin Loukinen for the draft sending issue. The page fault issue involved the OS' ability to invalidate record pointers on occasion when it moves stuff around. I had always assumed it would soft-reset before doing this, but I was wrong as indicated by the documentation on page 47 of the OS2 manual. This version should fix the BB2.0 simulator's page fault as well as intermittent message problems on the device while it is busy. The draft sending issue was the same bug as in 1.9.10 but I didn't fix it for the draft section. And last but not least since I was working on a bunch of XML stuff for this release, this version has a HEADLINES folder which you may or may not want.. I plan to make it optional in the future. It is functional except that on the Blackberry series it may not be very useful since RSS/RDF messages will be limited to 2K due to the crippled transport. It's kindof a cool feature, basically try sending your pager an RSS/RDF formatted message and it will bring it into the HEADLINES folder and let you follow links with Go.Web.
  • v1.9.13 - More bug fixes from David James and me. Just trying to get all of the flash pointers to stay correct when the flash has been moved around, which the OS will do during garbage collections. This version will still page fault on the simulator with the release mode but don't worry this is only because the simulator doesn't update the database edition properly, which is our indicator to refresh our flash pointers. We do have a _DEBUG test so that it updates our flash pointers each time we yield, so the debug build will run without problems on the current simulator. In the future we will either come up with a runtime test for whether we are running on the simulator, or hopefully the simulator will be fixed to increment the database edition when it does its agressive flash movements.
  • v1.9.14 - There is an apparent problem with the select_method function in 850 OS 1.4.78 (1.6 SDK). It gives a strange "Invalid???" error when you try to pick an address in the composer. I found that the regular mail was using a select_method_using function instead, so I've switched over to using that function on systems which have it; >=1.6SDK.
  • v1.9.15 - Launch URLs from message body, press 'l' or pick the "Browse the link" menu option. Also added BB OS 2.0.20 Message.dll 2.0.005 support.
  • v1.9.16 - Alex Schmelkin found that Blackberry OS flavors don't calculate get_num_records() properly when records are added, so I do a brute force count for the draft folder. I didn't recognize the bug since it actually works on the older RIM950 OS which is what I use. Pressing 'c' from the main screen now jumps right into the compose mail for convenience.
  • v1.9.17 - Bug fix! Alex and I finally found the most annoying bug of them all, which was an intermittent crash during composing mail. It turned out to be an incredible 1 character change.. I had accidentally left out the & reference for the database object in the ComposeScreen class and therefore it was constructing a new database object each time the composer was called. The only other change in this version is another little fixup in the ComposeScreen destructor, and also the addition of the W hotkey for the icon.
  • v1.9.18 - A bug fix for Error 264 while deleting messages from the regular message application. Also various stuff; like cap+d for deleting messages, 't' and 'b' for the folder screen, 'l' on the folder screen for opening a Go.Web launch, changed the 'b' for toggle alert bell to 'a' so it doesn't conflict with the normal 't' and 'b' usage.
  • v1.9.19 - Sorry this release took so long. It has a little different method for auto-deleting the XML messages which so far works better. Also it has a sent mail folder, and I've put it towards the bottom since the folder list was getting unwieldy on my pager-sized device. Not many options in sent mail, soon to have a resend though.
  • v1.9.20 - A fantastic addition by John Kirkland which adds support for using Trancell's email-web browsing. You may now select between Go.Web and Trancell in the Options. To summarize, we've had link browsing for the last few releases; either 'l' or select the menu option "Browse the link." Using the Trancell option causes the web request to be recieved as an email. It's actually very convenient even if you have Go.Web since you can fire off a bunch of requests and then read them later. Oh, and my excessive use of this feature has caused me to find another "duh" bug. It was in the word-wrapping code, if you tried to send a long line without any spaces it would hang.
  • v1.9.21 - Find text option 'f' 'F' find again; this is just for within a particular message or channel. Support for OS 2.1 (use sparrow20).
  • v1.9.22 - About time for another release. Actually I've been sitting on this for a while for no good reason, just me being too lazy to upload. Support for more OS 2.1 versions (keep using sparrow20). Got rid of initialized global variables which I *think* can cause OS 2.1 to error 264, though I've only seen that in another project. This version also has super-charged alerts, where you can pick between; Pulsed and Continuous vibration, Tone repetitions and pauses, you can also control the vibration length from a teeny .1 second to a monster 25 second duration. It also has a repeat interval which you can set to alert more than once. These alert enhancements, overkill for sure, were generously sponsored by Mike Greenberg.
  • v1.9.23 - 2.1.23 support.
  • v1.9.24 - 2.1.23/ support thanks to Doug Marien. Watch puppy RimTaskYield() is now in some places for people with lots of messages.

Source & Binaries (v1.9.24):

Feedback: Chris Faherty <>