Donate to the American Red Cross
Click Here to Donate to the American Red Cross



General   Tools   Xbasic setup   My Programs   My Experience   Disclaimer

General:
NOTE: THIS STUFF IS PENDING AT THE MOMENT !
I POSSIBLY IRREPARABLY DESTROYED THE FIRMWARE IN MY REX WITH WRITING COMMANDS WHICH ARE AN UNDOCUMENTED FEATURE IN THE VERSION WHICH CAN BE DOWNLOADED FURTHER DOWN ON THIS PAGE. READING AND ALL OTHER COMMANDS SHOULD BE SAFE.
I am developing software to contact the Rex 6000 PDA through serial communication. On this page you can find the tools I use and the programs I have written so far. The goal is to create a package which allows to synchronize without the software provided by Xircom and thus to synchronize other Personal Information Managers.

Tools:
Portmonitor
XBasic

XBasic setup:
The probably most compatible way to talk to a serial port through Xbasic is to use the windows API. These have to be declared to Xbasic. The standard declarations do, however, not declare all necessary functions. Thus here a modified kernel32 declarations file. You need to replace the standard kernel32.dec in xb/include with this one.

My Programs:
The following XBasic programs are published under the Gnu Public License

The latest code (rename to .x extension!):
Establish communications, request firmware version and get and set time and read the memory. All controlled through a command file.

Old codes:
My first XBasic attempt
My second XBasic attempt
My third and successful XBasic attempt
Establish communications and request firmware version
Establish communications, request firmware version and ask for time
Establish communications, request firmware version and get and set time


My Experience:
7-Aug-2001
The newest code is much improved in that it now is controlled by a command file and does not need to be compiled any more to be used. Write or modify a command file, put into the directory where you have the executable code (see below for the dll business) or into the bin directory of the Xbasic tree and you are able to send commands to the Rex and read memory pages (both physical and logical) into a file. I am not sure whether the logical page handling is ok yet. Have a look at it and tell me what you think. Next step will be the reverse. Writing to the Rex. It is, however, unclear to me how much checking I want to do before I send the content of a file to the Rex. All assuming that writing works at all ;-) I was able to read to up logical page 0x0DE . All with offset 0. I have not found any data at other offsets. Is there ?
30-Jul-2001
The newest code should read 1MB of firmware. Comment out the extra write statement of the memory addresses to get a hopefully one-to-one copy. And here are two standalone programs to read the firmware. You can read with or without memory addresses saved in the log file. It takes quite a while to read the memory (>15 min). You also need to copy the XBasic runtime library into the directory where you are running the program (or into your windows installation directory). If you don't want to run the programs, here is the output I got with and without memory addresses.
26-Jul-2001
The newest code contains a second read function which is used for addins. This might be the thing I was missing yesterday. So there might be one read function for the firmware and one for the user space. I have again created two log files possibly covering parts of the address space in the firmware. Here is what I read: Part 3 and Part 4.
25-Jul-2001
No new features in the code today. Just a little error handling. I have read data from several addresses of the Rex memory. But I have not been successful in getting a complete idea how it is structured yet. From what I have seen at a quick look it seems I am NOT reading the firmware part but only the userspace memory. It is however strange that I there find pieces of the add-ins which according to Chris' firmware map seem to reside in the firmware part (or am I wrong?). Anyway, here are two logs of parts of my Rex's memory (don't use the private information for nasty things like spamming ;-). The addresses from which I read them are in the files too. They are the params 1 and 2 from the serial protocol analysis by sorry don't know whom. I always tried to read 512 Byte chunks but got various sizes as answers. I assume the rest is filled with 0xFF's. I had difficulties on reads when I increased param 2. They mostly resulted in empty responses. Here is what I read: Part 1 and Part 2 Any ideas on how to interpret the address space I covered and the possible relation to the firmware space would be greatly appreciated.
24-Jul-2001
The latest code is now able to read parts of the Rex's memory. I now only have to find out what data is stored where and I would be able to download all the information stored. Next step will be to test writing. A funny thing which possibly makes reading (and writing ?) rather slow is that at maximum 512 Bytes are written at a time (at least it looks like that). I haven't had any success in reading more at a time.
19-Jul-2001
The latest code is able to get and set the time of the Rex. Not surprisingly the process is rather quick compared to the speed of RexTools.
18-Jul-2001
Continued improving the code. It now calculates the checksum and is able to read the time off the Rex. Next step will be to set the time. Should not be difficult :-)
16-Jul-2001
I cleaned up the code and prepared it for further extension. It's still doing the same thing as the previous code: Open communication and get firmware number.
15-Jul-2001
My third and successful XBasic attempt
12-Jul-2001
Ok, got a little further. I found several bugs in the first version. I seem now to be able to send the correct characters to the Rex. But I haven't gotten any response yet. The only difference I can see at the moment are two more function calls to SetCommEventMask and GetCommError. But I wasn't able to call them properly yet. The updated Xbasic code is here
My second XBasic attempt
and a protocol of what that is writing
A portmon log of the second basic program
When you compare the two log files you will see that they are pretty close. Amazingly enough I still don't get a response.
11-Jul-2001
Here is a log of all the windows API function calls RexTools is using during the initialization:
A portmon log of the RexTools initialization
My first XBasic attempt Opens a COMM port in a way similar to what RexTools are doing.


Disclaimer:
Copyright © 2001 by Gerd Krahmann . All rights reserved.

SOFTWARE ON THIS PAGE IS NOT A PRODUCT MADE BY XIRCOM INC. THE AUTHOR HAS NO CONNECTION WITH XIRCOM. REX IS A TRADEMARK HELD BY XIRCOM. XIRCOM DOES NOT PROVIDE ANY SUPPORT REGARDING THE USE OF THE SOFTWARE. ALL SOFTWARE PROVIDED BY THE AUTHOR HAS BEEN CREATED BY INFORMATION FOUND ON THE INTERNET AND BY TRIAL AND ERROR.

The software found on this page and written by me is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License. The software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.