Reverse Engineering Project: Driver for the ProHance PowerMouse 70

Well… while digging around in our masses of old hardware, I came up with this little gem…

ProHance ProMouse (aka PowerMouse 70), a rather unergonomic boxy looking mouse that's round at the palm end, and has an inset region of buttonsโ€ฆ two pill-shaped 20mmร—4mm buttons for the left/right mouse buttons, and a 2ร—5 grid of circular 4mm buttons marked with various keyboard labels.

ProHance ProMouse (aka PowerMouse 70)

This is an old 12-button serial mouse. Under DOS/Windows 3.x (its native platform), the additional buttons were mapped to keys on the keyboard, Escape, PageUp, Down, Home, End, Insert, Delete, Backspace and Function. The Function button allowed access to all the function keys, F1 through to F10. Thus, it allowed you to jump around documents, without having to switch between keyboard and mouse all the time.

Now, to achieve all this magic, it uses a proprietry protocol, one not supported by gpm or X.org. As I’ll probably end up reverse engineering my PDA (a Sharp Mobilion PRO PV5000A) eventually, I figured this would be a nice little project to start with.

What I know so far…

The mouse itself seems to prefer running at 4800 baud, and has a variable packet size.

The buttons are a very simple. There are two events, button pressed and button released (as you’d expect). These are sent as a two-byte packet:

  • 0x0d ID — Button ID has been pressed…
  • 0x0c ID — Button ID has been released…

The buttons themselves are numbered as follows: Left Button = 0x1d, Right Button = 0x1e, Escape/F1 = 0x1f, PageUp/F2 = 0x20 … etc … through to Fn/F10 = 0x28. So the sequence 0x0d 0x1d 0x0c 0x1d, is the byte sequence for a left click.

Movement, however, is prooving difficult. For othagonal movement, it alternates between two bytes, before sending 0x08. It may also change direction by sending 0x88. When moving left, it sends 0x78 0x98 repeatedly. Moving right is the reverse, 0x98 0x78. Vertical movement uses a similar scheme, 0x87 0x89 denotes upward movement, while 0x98 0x78 appears to denote downward movement.

However, mixing the two adds in additional bytes, which I’m yet to determine the meaning of. 0x77, 0x79, 0x97 and 0x99 appear to be related to diagonal movement. The codes, 0x68, 0x86, and a couple of others, are totally unknown at this stage.

Right now, I’m going to keep plodding along here… I’m looking at gpm source code to see if I can add support for this mouse, then I might look at X.org… but progress will be slow.

For what it’s worth… the company that produced this mouse, is no more… they’ve been gone for some time now. They produced quite a few mice similar to this one, including one 40-button model (yeah, practically a keyboard in its own right). The protocol used with those may be similar, but more research will need to be done.

Stage 3 is Uploaded…

Well, after my genius moment last night (forgot to stick the stage 3 tarball on my laptop to take to uni), I managed to upload the Cobalt stage 3 tarball for Gentoo/MIPS 2006.0.

Feedback would be appreciated, I’ve done some testing, and everything seems kosher, but more thorough tests would be appreciated before I go pushing them out to mirrors. They are presently available in the usual location, along side the 2005.1 stages.

Gentoo Linux/MIPS for Cobalt — 2006.0 stage 3 complete

Well, at long last it’s built… I’m currently doing some testing of the stage 3 tarball (I’ve already hit a problem with missing /dev entries, which has now been rectified).

Currently, I’m doing some build tests to check that everything is okay, once that is done I’ll release the tarball onto my devspace.

ETA: approximately 1 day, I’ll probably upload after 12:00PM local time (Brisbane Time; that’s 2:00AM GMT).

Gentoo Linux/MIPS 2006.0 for Cobalt — The fun begins

Hi All,
This is a short one … I’m now in the process of upgrading Catalyst on my Qube2, which shouldn’t take too long… After that, I’ll build a stage2 “seed” stage, then I’ll start the build in earnest.

Estimated time … assuming I have no hiccups … will be approximately one fortnight. The stages will be based on Chris’ 20060123 portage tree snapshot.

This release… I will be concentrating on the stage 3 tarballs. I might provide a stage 1/2 MIPS1 stages, so those with MIPS1, MIPS2 or MIPS32 Little-endian CPUs can build their own systems … although no support for these MIPS1 stages will not be provided.

I’ll keep you all up-to-date on what happens. ๐Ÿ™‚
Regards,
Stuart Longland

Modern OSes on ancient hardware

Yep, I’m guilty of doing this sort of thing… take a 13 year-old piece of kit like an SGI Indy, and chuck Linux 2.6 with KDE 3.5 on it. But how about this…

A group of individuals, with seemingly too much time on their hands, have successfully managed to run Windows XP on as little as 8MHz clock speed and 16MB RAM. See this page for more details.

Now I’m really tempted to get my 386 back out of the garage, and try KDE 3.5 on it. ๐Ÿ˜‰

Update: I tried this the other day. After spoon-feeding the box with floppies (nfsroot didn’t want to work, largely because the eepro driver was looking for my LAN card on IRQ 11 instead of 10), and spending all day watching tar -xjvpf stage3-hardened-x86-2005.1.tar.bz2 run its course, I’ve come to the conclusion I had before I attempted the procedure.

With a speed of just over 4 (bogo)Mil instructions/sec, and numerous 80486+ instructions creeping into the Python and sshd binaries, I’ve decided it’s not worthwhile. I might try kernel 2.4 on it later (it used to run Slackware 8.0 w/ kernel 2.4.18 just fine), but right now it’s my Gentoo-powered footrest.

RANT: Telemarketers, and their opt-out calling lists.

Yep, I’m sure everybody knows what I’m on about… it’s those annoying people, that ring just as you’re about to take a bite of your hot dinner … or wake you up/disturb you in the middle of the day, to sell you something you’re not interested in.

I’ve endured it for quite some time now. Somebody rings on the landline phone (thankfully they haven’t touched my mobile), and starts their marketing blurb. Sometimes they’ll ask for a “Mr Longland” … and after further probing, maybe I can get a “D G Longland” out of them (being my father’s phone line, he’s listed in the phonebook, and this is where they get the number from). Depending on my mood, I’ll either be highly synical or flippant, or I’ll play dumb.

Each time it happens though, I still can’t help but think … they’re doing it all wrong. Just because a number is in the phone book … that doesn’t instantly give them the right to use it to make an unsolicited commercial phonecall. At the moment for us here in Australia, there are two options:

  • Request our number to be made silent. This would prohibit anyone from publishing your phone number basically. But this wouldn’t stop those call centres that just hit +6173 then throw 7 more random digits on the end. It’s also an inconvenience for people who know us.
  • Get added to the ADMA Do Not Call List. Now this will help cull calls from crowds that are a member of this association … but what about others?

I thus propose another solution.

Rather than just calling anyone, then having people opt-out of the service… instead… people should opt-in to receiving calls. This is how it’d work.

  1. A telemarketing company puts out an advert in the media (radio, TV, newspapers…etc.), listing possible service areas that people might be interested in, as well as a phone number for people to contact for more information. Let’s say for the example, this crowd are in contact with mobile phone carriers, internet providers, mortgage crowds, and a few other companies.
  2. People who are interested then ring this number. An operator (or a computer) answers, and gives them the rundown of the services available.
  3. The caller then selects the services they want, along with specifying a preferred contact phone number and times to call.
  4. The company then adds the caller to their call-list.

This has a number of advantages:

  • Their people no longer get abused by people who aren’t interested.
  • They pay less to run the companies, because fewer calls are wasted.
  • Customers here about the services they are interested in, and may attract more by word-of-mouth.

Disadvantages:

  • There’s an additional cost to pay for adverts (which is offset by fewer calls)
  • Harder for new players to become established.

Maybe if companies took this approach… fewer people would be needlessly disturbed… and they might become more successful as a result. ๐Ÿ™‚

Rellies Season starting in Brisbane

Yep… it’s that time again, the time when we’re going from one end of town, to the other, visiting numerous relatives and attending many christmas parties over the silly season.

Stinking hot weather … time with the family… perfect waterfight weather actually.

This also means I’ll be on a somewhat limited internet connection (last year, I had none at all; the phone line was that bad) and so may be partially or completely unavailable. Hopefully nothing will break in my absense, and we’ll be right. ๐Ÿ™‚

I’ll try to be online if I can; won’t be as available, but I’ll have logging going on my IRC session on toucan (nick: Redhatter-DGO on FreeNode and AustNET; Redhatter- on irc.oz.org because they’re stingy on nickname lengths). Due to the limited bandwidth, I won’t be doing much with CVS … SSH will be bad enough.

Anyways, that is all from this part of the world. Gentoo/MIPS handbook is still under review; I’ll try and make a static version of it available in my devspace shortly in case (heaven forbid) our server goes down (like it did yesterday; after a nasty storm took out our electricity for 4 hours). Other than that… Merry Christmas; see you on Boxing Day, if not before. ๐Ÿ™‚

Gentoo/MIPS Handbook: More updates for the docs team

Hi All…

For those of you who have any last-minute updates for the MIPS handbook, please speak up now. I have sent up patches so that the docs team have a head start on implementing the changes (particularly for any translations that may exist). I hope to have the shiny new handbook in place shortly.

The impatient ones may read it on my own server here.

Regards,
Stuart Longland

Gentoo/MIPS Cobalt 2005.1 — missing /dev entries

Hi All,
It has been discovered that the latest 2005.1 stages appear to be missing critical /dev entries. To work around the issue… execute the following commands before exiting the chroot environment:


# cd /dev
# /sbin/MAKEDEV generic-mipsel

This should create the necessary device nodes. I shall look at rectifying the issue ASAP. Stay tuned.

New Netboot images for Cobalt… and revamp of Gentoo/MIPS Handbook

Hi All…

I have just started work at improving the netboot images for the Cobalt port. Here you’ll find my latest netboot images. What has changed, is that instead of distributing the raw kernel, these are now distributed as a tarball (uncompressed — bzipping them actually made them larger) complete with CoLo, default.colo startup script, and symbolic links for most MIPS-based Cobalt systems.

To use. On the server, download the .tar file (and optionally run it through gpg, sha1sum and md5sum to verify you downloaded it right). Then unpack it on your server by running: tar -C / -xvf nfsroot-...cobalt.tar.

Then, when booting the Cobalt server… hold down left & right arrow buttons. You should see “Net Booting” appear on the display, followed shortly after by a prompt asking if you want to enable the Console. “Console ON” should be already selected, just press ENTER here.

You’ll then be asked where to boot from. Scroll down two places, and you should see “Network Boot (NFS)”. Select it and press ENTER. You should see “Loading Gentoo/MIPS” on the LCD panel, and the serial console should display the bootup progress. You’ll finally arrive at the “Press ENTER to enable this console” prompt that you should all be familiar with.

If, however, you need kernel parameters for your machine (such as Cobalt 2700 users, who need to disable serial console and start telnet) — select the Boot Shell method, and boot in the traditional way. The kernel image is named kernel.gz.

I’ll be updating the Handbook shortly to reflect this. I have an open bug covering the revamp of documentation. My draft handbook is viewable in the usual place, and feedback is encouraged. A lot has changed in the Linux/MIPS world since the docs were last overhauled, and so I aim to bring the docs up-to-date.

I shall keep you all posted as the work progresses.