Windows Missile Launcher
I have received many requests from Windows developers who want to improve on the supplied Windows software for the USB Missile Launcher and DreamCheeky Rocket Launcher. I’m more than happy to supply the source code to anyone who is interested, in fact it is included with the Macintosh distribution.
To make things a bit easier, I’ve pasted below the interesting parts of the source code. If you would like to see more of the source, please comment here or mail me.
Here’s a neat trick. With a bit of construction, you can mount a web camera on your DreamCheeky Missile Launcher and control it with your USB joy stick.
![]()
Windows developers please use the comments section on this page to exchange discussions and post information about your development efforts.
- (id)MissileControl:(UInt8)controlBits;
{
IOUSBDevRequest devRequest;
UInt8 reqBuffer[64];
USBLauncher *privateDataRef;
int i;
IOUSBDeviceInterface **missileDevice;
//NSLog(@”USBMissileControl: MissileControl”);
int numItems = [launcherDevice count];
//NSLog(@”USBMissileControl: MissileControl - launchers to control = %d”, numItems);
for (i = 0; i DeviceRequest(missileDevice, &devRequest);
reqBuffer[0] = ‘U’;
reqBuffer[1] = ‘S’;
reqBuffer[2] = ‘B’;
reqBuffer[3] = ‘C’;
reqBuffer[4] = 0;
reqBuffer[5] = 64;
reqBuffer[6] = 2;
reqBuffer[7] = 0;
devRequest.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBClass, kUSBInterface);
devRequest.bRequest = kUSBRqSetConfig;
devRequest.wValue = kUSBConfDesc;
devRequest.wIndex = 1;
devRequest.wLength = 8;
devRequest.pData = reqBuffer;
(*missileDevice)->DeviceRequest(missileDevice, &devRequest);
reqBuffer[0] = 0;
if (controlBits & 1)
reqBuffer[1] = 1;//left
else
reqBuffer[1] = 0;
if (controlBits & 2)
reqBuffer[2] = 1;//right
else
reqBuffer[2] = 0;//right
if (controlBits & 4)
reqBuffer[3] = 1;//up
else
reqBuffer[3] = 0;//up
if (controlBits & ![]()
reqBuffer[4] = 1;//down
else
reqBuffer[4] = 0;//down
if (controlBits & 16)
reqBuffer[5] = 1;//fire
else
reqBuffer[5] = 0;//fire
reqBuffer[6] = 8;
reqBuffer[7] = 8;
devRequest.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBClass, kUSBInterface);
devRequest.bRequest = kUSBRqSetConfig;
devRequest.wValue = kUSBConfDesc;
devRequest.wIndex = 0;
devRequest.wLength = 64;
devRequest.pData = reqBuffer;
(*missileDevice)->DeviceRequest(missileDevice, &devRequest);
if (controlBits & 32) // Park
{
//NSLog(@”USBMissileControl: MissileControl - MissileLauncher Park”);
[self MissileLauncher_Park];
}
}
else if ([privateDataRef getusbVendorID] == kUSBRocketVendorID &&
[privateDataRef getusbProductID] == kUSBRocketProductID)
{
//NSLog(@”USBMissileControl: MissileControl - DreamCheeky %x”, controlBits);
// ===========================================================================
// Control of USB Rocket Launcher - DreamCheeky
// ===========================================================================
// Control of the launcher works on a binary code - see the table below for an explanation
//
// | 16 | 8 | 4 | 2 | 1 |
// |——|—|—|—|—|
// | 0 | 0 | 0 | 0 | 1 | 1 - Up
// | 0 | 0 | 0 | 1 | 0 | 2 - Down
// | 0 | 0 | 0 | 1 | 1 | 3 - nothing
// | 0 | 0 | 1 | 0 | 0 | 4 - Left
// | 0 | 0 | 1 | 0 | 1 | 5 - Up / Left
// | 0 | 0 | 1 | 1 | 0 | 6 - Down / left
// | 0 | 0 | 1 | 1 | 1 | 7 - Slow left
// | 0 | 1 | 0 | 0 | 0 | 8 - Right
// | 0 | 1 | 0 | 0 | 1 | 9 - Up / Right
// | 0 | 1 | 0 | 1 | 0 | 10 - Down / Right
// | 0 | 1 | 0 | 1 | 1 | 11 - Slow Right
// | 0 | 1 | 1 | 0 | 0 | 12 - nothing
// | 0 | 1 | 1 | 0 | 1 | 13 - Slow Up
// | 0 | 1 | 1 | 1 | 0 | 14 - Slow Down
// | 0 | 1 | 1 | 1 | 1 | 15 - nothing
// | 1 | 0 | 0 | 0 | 0 | 16 - Fire
//
// | Fire |RT |LT |DN |UP |
//
reqBuffer[0] = 0;
reqBuffer[1] = 0;
reqBuffer[2] = 0;
reqBuffer[3] = 0;
reqBuffer[4] = 0;
reqBuffer[5] = 0;
reqBuffer[6] = 0;
reqBuffer[7] = 0;
devRequest.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBClass, kUSBInterface);
devRequest.bRequest = kUSBRqSetConfig;
devRequest.wValue = kUSBConfDesc;
devRequest.wIndex = 1;
devRequest.wLength = 8;
devRequest.pData = reqBuffer;
(*missileDevice)->DeviceRequest(missileDevice, &devRequest);
reqBuffer[0] = 0;
if (controlBits & 1) // left
{
reqBuffer[0] |= 4;
}
if (controlBits & 2) // right
{
reqBuffer[0] |= 8;
}
if (controlBits & 4) // up
{
reqBuffer[0] |= 1;
}
if (controlBits &
// down
{
reqBuffer[0] |= 2;
}
if (controlBits & 16) // Fire
{
reqBuffer[0] |= 16;
}
reqBuffer[1] = 0;
reqBuffer[2] = 0;
reqBuffer[3] = 0;
reqBuffer[4] = 0;
reqBuffer[5] = 0;
reqBuffer[6] = 0;
reqBuffer[7] = 0;
devRequest.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBClass, kUSBInterface);
devRequest.bRequest = kUSBRqSetConfig;
devRequest.wValue = kUSBConfDesc;
devRequest.wIndex = 0;
devRequest.wLength = 8;
devRequest.pData = reqBuffer;
(*missileDevice)->DeviceRequest(missileDevice, &devRequest);
reqBuffer[0] = 0;
reqBuffer[1] = 0;
reqBuffer[2] = 0;
reqBuffer[3] = 0;
reqBuffer[4] = 0;
reqBuffer[5] = 0;
reqBuffer[6] = 0;
reqBuffer[7] = 0;
devRequest.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBClass, kUSBInterface);
devRequest.bRequest = kUSBRqSetConfig;
devRequest.wValue = kUSBConfDesc;
devRequest.wIndex = 1;
devRequest.wLength = 8;
devRequest.pData = reqBuffer;
(*missileDevice)->DeviceRequest(missileDevice, &devRequest);
if (controlBits & 16) // Fire
{
//NSLog(@”USBMissileControl: MissileControl - DreamCheeky Fire”);
// Need to stop the fire sequence - otherwise it continues withou stopping
[self DGWScheduleCancelLauncherCommand:5.000];
}
if (controlBits & 32) // Park
{
//NSLog(@”USBMissileControl: MissileControl - DreamCheeky Park”);
[self DreamCheeky_Park];
}
// ===========================================================================
// End Control of USB Rocket Launcher - DreamCheeky
// ===========================================================================
}
}
return self;
}

I’ve gone about making a Windows port that works ok (except the firing can be a bit fidgety at times), for more information and the link to download, go here:
http://word.before-reality.net/2006/12/30/windows-support-for-dreamcheeky-usb-missile-launcher/
Hi i have lost the Driver disk for my windows version of the software only really want to launch my missiles across the room at my flat mate again. Even more so now i have mounted cocktail sticks in it (should make him wash up more
) Is there any chance of getting the orginal drivers from yourself? I have looked every where, i have even tried to convert your .DMG’s back to .ISO’s but that didn’t work out so well.
Id be so greatful if you could help cheers,
Martin
*edit
I have the steel gray 3 white with red fin missile launcher
Hi Martin…
You can’t use the Apple DMG files on a PC.
I’ve had a quick look for location on the net that might have a copy of the origional CD that you need and can not find anything obvious at this time. Maybe someone can make an image of the CD, host it, and post the link here.
- David
I have an electronic copy of the most recent PC launcher software for the Rocket Launcher (Green, yellow darts) that I can upload, but I don’t have a site to host the file myself. Maybe David would host if if I could email it?
That link for the windows port doesn’t work any more, could you provide another one please.
I’ve recently started to work on a control software for windows myself.
Right now, only the DreamCheeky launcher is supported because thats the one I have, but I plan on adding support for the other launchers by reusing the code of USB Missile Launcher.
The first release can be found here (website is in german only right now, sorry.. will add an english translation sometime soon):
http://www.mkleinhans.de/projects/rocketui
As soon as I implement the required parts for the other launchers and finish cleaning up my code, I will release the source, too.
Howdy,
I bought the same dreamcheeky rocket launcher to put it on my robot and it turned out the software from dreamcheeky sucks. After searching around and using this site as the starting point, I’m able to get a custom app working with it. I went ahead and created RocketLauncher.dll using UsbLibrary.dll from an article on Codeproject (http://www.codeproject.com/useritems/USB_HID.asp). I make the api as simple as possible to provide quick access to the launcher from people like me who just wanted an easy and quick way to incorporate it into our projects. Pretty simple to use. RocketLauncher.dll is .net library. I only tested it with dreamcheeky usb rocket launcher. The read values from the usb device is a little bit different from Brandon’s values in comment one. Will explain further down.
Here is a little details on the file, pretty easy to use:
To use it with .net app:
- Download UsbLibrary.dll from: http://home.myuw.net/tmn/UsbLibrary.dll
- Download RocketLauncher.dll from http://home.myuw.net/tmn/RocketLauncher.dll
- Put both files in the some directory and add reference to RocketLauncher.dll (no need to add ref to UsbLibrary.dll)
- Create an instance of RocketLauncher.Launcher and have the following api available for you:
SetDeviceInfo(): Allow you to set vendor id and product id. Currently, the default vendor id is 1941 and product id is 8021 if you use the default constructor.
Connect() - must call this function first to load the rocket launcher before any movement.
Up(), Right(), Left(), Down(), UpLeft(), UpRight(), DownLeft(), DownRight(), StopMoving(), Fire(), StopFiring().
OnDataReceived event let you get all the data (converted to string) sent from the usb device
All moving already checks for the max values of left, right, up, down and will stop moving base on the following data received from usb:
0 64 0 0 0 0 0 0 0: max down
0 128 0 0 0 0 0 0 0: max up
0 0 4 0 0 0 0 0 0: max left
0 0 8 0 0 0 0 0 0: max right
Sorry, I don’t do any other fancy stuff since these APIs are just exactly what I need for my robot project. However, I leave the actual usb device within RocketLauncher.Launcher public so that anybody wants to do more things with it can go ahead.
Make sure to check your vendor id and product id before using it and set it properly. (you can find them in the device manager session of your launcher).
Cheers.
how can I setup 2 launchers on the same PC?
My Mac software supports multiple launchers automatically. I do not know what the windows software will or will not do. The software does have to be specifically written to handle it.
http://www.codeplex.com/Rocket
C# library to control the Dream Cheeky. I’m working on absolute positioning, and position tracking as well.
Hi,
i’ve just take the USB Missile Launcher… the gray version with 3 white/red missiles.
So i’m searching on the net and i’m downloading and tasting the various application developed… but no one seem to work (only the dafault application).
I’m working on a PC.
Someone can help me ?
Thanks
hi,
I’ve just written a c dll to control a dream cheeky launcher from the scripting language lua, if that’s any use to anyone.
Lua is nice and easy to learn for them that haven’t tried it.
http://xp.8m.net/files.html
Has anyone had any luck getting the grey missile launcher to work on windows xp 64bit? Or can anyone point me in the right direction?
Thanks!
Anyone know why the APIsample from ninja will recognize the launcher, but not send any commands when running under win2K? Works fine under XP.
Can you put up the link for the windows download again please!!!!!!
This should help.
http://www.dreamlink.info/index.php?pagename=download
Assumes you have a DreamCheeky branded launcher.