Spacepilot - to recycle it or not - this is the question

Post questions, comments and feedback to our 3Dconnexion Windows Development Team.

Moderator: Moderators

Post Reply
darvaru
Posts: 6
Joined: Wed Dec 19, 2007 2:16 pm

Spacepilot - to recycle it or not - this is the question

Post by darvaru »

Hi there.

I own a Spacepilot device but i don't use any 3D modeling software, no software that is supported or was supported by you (3DConnexion).
It has nice buttons a cool LCD Display but other than that with the current drivers and software it is purely useless.
Since I am a programmer (in my free time) I've said to myself "Hey this device has a SDK" but when looked a little at your SDK in order to make something usefull from this device I quickly realised that it was in vain.

Later I've found on this forum the RBC9 driver that could allow to do some usefull stuff but unlucky for me it doesnt work.

I dont want to go as such low level as RBC9 did (kernel driver) since i do not poses the necesary knowledge but what the heck I am not supposed to know such low level stuff if there is a well written API/SDK which on our case it doesnt exist.

So what are my options?
To throw in a recycle bin this ~400$ device or ....insert other option here...?
jwick
Moderator
Moderator
Posts: 3341
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Post by jwick »

Hello darvaru,

What do you want to do with it that you can't do with an SDK?
darvaru
Posts: 6
Joined: Wed Dec 19, 2007 2:16 pm

Post by darvaru »

Hi jwick.

For starters one idea could be a process monitor / uptime / clock / network load / memory & disk monitor / a winamp visualisation plugin (i doubt about that since i've observed that the LCD has high latency, but i may be wrong) .... you name it.. anything usefull that can be displayed on that LCD. If you want to make an ideea about what i am talking look at the Lcdproc http://lcdproc.omnipotent.net/ as an example.

Now my problem shouldnt and it isnt the data aquisition but the display of that data on that LCD since i really do not know how to do it and no examples involving the LCD exist in the sdk or a documentation explaining the protocol used.

Ok ok, please dont get me wrong, your product does his job very well with all those application listed as supported but i want to do a little more with it (since i dont use any of that apps). This device has a lot of potential in doing a lot of things other than improving the productivity as 3d modeler and I'm almost sure that you agree with me.

Probably i will scratch my head a lot and give some serious head hits into some walls :)) till i'll be able to make what i have in my mind but any help it will be quite nice to have.
jwick
Moderator
Moderator
Posts: 3341
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Post by jwick »

Hi darvaru,

OK. I get ya.
You are more interested in using the LCD for innovative things than the motion controller. There are a lot of very cool things that could be done with it. You could even mix the motion controller in. Imagine controlling winamp with the motion controller with output to a high speed color LCD. That would be slick.

I did do an example controller for iTunes a while back. It showed the upcoming songs, current song, volume, etc. on the LCD. It used the motion controller to scrub through songs.

You are right about the LCD--it is too slow to do any realtime updates. It actually isn't the LCD that is the problem; the problem is the low speed USB connection to the machine. This is one reason why we don't expose access to the LCD via the COM SDK.

I did explain to someone on the forum how he can access the LCD. I suspect it was a bit too overwhelming for him since I never heard from him again <GG>.

Thanks for the input. Such innovative suggestions get our product marketing folks thinking...

Jim
3Dx Software Development
darvaru
Posts: 6
Joined: Wed Dec 19, 2007 2:16 pm

Post by darvaru »

Thanks for your understanding and quick response.

I belive that you are reffering to this post viewtopic.php?t=1095

Ok, i've understood the display layout and the commands and data to be sent, but I'm still in the proverbial "fog" since I do not see what API should I use to send those commands (I never played with any USB device before). I guess using HID interface would be a good idea, I'll give it a try when I'll be at home using HIDRezero example as a base.

Anyway, can you give me a hint about how many fps can be achieved on that display when you fill it completly or how many seconds does it takes to be filled completly :twisted: ? Or better, how many commands(data)/second does it accept.

Well, from what you said I'm a little surprised about the low speed of the interface. Almost all PC's from this generation supports USB 2.0 which is more than enough for what this device does but anyway I'm not here to judge your design.

PS: I appologize for any grammar and spelling mistakes done in this and previous posts, im not a native english speaker nor do i plan to be :)
jwick
Moderator
Moderator
Posts: 3341
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Post by jwick »

I belive that you are reffering to this post viewtopic.php?t=1095
Yes that's the one.
Ok, i've understood the display layout and the commands and data to be sent, but I'm still in the proverbial "fog" since I do not see what API should I use to send those commands (I never played with any USB device before). I guess using HID interface would be a good idea, I'll give it a try when I'll be at home using HIDRezero example as a base.
You can just WriteFile to it.
Anyway, can you give me a hint about how many fps can be achieved on that display when you fill it completly or how many seconds does it takes to be filled completly ? Or better, how many commands(data)/second does it accept.
It's pretty slow. The key (and the difficulty) is to only update the part of the LCD that you change. You can set the start position for drawing to limit the amount of the LCD that you draw. I spent a lot of time optimizing the code for the static layout of the buttons display on the LCD. If you change the whole thing it will take a couple of seconds. I don't remember the exact data rate.

Well, from what you said I'm a little surprised about the low speed of the interface. Almost all PC's from this generation supports USB 2.0 which is more than enough for what this device does but anyway I'm not here to judge your design.
It's not the interface in the PC, it's the interface on the USB chip inside the device. These hardware decisions get made WAY in advance when a chip gets picked and the firmware gets written.
darvaru
Posts: 6
Joined: Wed Dec 19, 2007 2:16 pm

Post by darvaru »

jwick wrote: You can just WriteFile to it.
I'll give it a try now that I'm home.

[qoute]It's pretty slow. The key (and the difficulty) is to only update the part of the LCD that you change. You can set the start position for drawing to limit the amount of the LCD that you draw. I spent a lot of time optimizing the code for the static layout of the buttons display on the LCD. If you change the whole thing it will take a couple of seconds. I don't remember the exact data rate.
[/qoute]

Well, it seems that the LCD (the physical device) have by its design high latency (it takes lot of time until a pixel is fully white or black) it is like an ancient CRT or LCD with a poor refresh rate (trails) so even having high write speed on it, it will not do any good since it's a "very lazy" LCD.

However the drawing optimisation is quite simple from my point of view, keeping in memory two 64x240 black & white bitmaps one with the current image displayed on the LCD and one with the new image that should be displayed on the LCD and having the drawing function updateing only the difference between those bitmaps. It doesnt require too much memory and the update function can be fairly fast enough not to be a CPU hog since the data to be processed isnt so big.
It's not the interface in the PC, it's the interface on the USB chip inside the device. These hardware decisions get made WAY in advance when a chip gets picked and the firmware gets written.
Well, having such a "lazy" LCD it really doesnt justify the usage of a high speed controller for accessing it (in case of Spacepilot), anyway it seems that you, as a software developers, are constrained by the hardware limitations of the used parts.

Maybe in the future (for new products) the hardware designers from 3dconnexion should use a low responsive LCDs (maybe even color LCDs) since they are pretty cheap. This will give you a lot of freedom as software developers and new oportunities to make a complete and a 24/7 useful device.

I hope that you got my ideas, having a device that it is still useful even when you are not using it for what it was designed could be an acomplishment towards the end user. It's like saying "Hey, this device its really useful even if i dont have my hand on it or using it in my favorite 'insert random 3D app', it earned the rightful place to be on my left side of keyboard, permanently"
darvaru
Posts: 6
Joined: Wed Dec 19, 2007 2:16 pm

Post by darvaru »

I belive i can call it a success :)
I've used portions of HIDRezero for detecting the Spacepilot and getting the device path & handle.

Now im implementing the display function which is pretty easy knowing what to do.

As a funny thing the leds are 4 grouped as 2 and can be litten individually (the groups) :) ,each group being controlled by a bit , first bit ->first group , second bit -> second group ,third bit -> third group , forth bit -> forth group... and combinations; Also as a funny thing the Spacepilot have a internal uptime clock :) that can be accessed using feature 0x10( if I remember correctly).

For now I'm planning to use in memory monochrome bitmaps so I can use the GDI for drawing pixels/lines/text. After -> device drawing optimisations.
Post Reply