Windows Forms app for the Nikko R2-D2 Skype Web Cam receiver.
Initial version: 0.1.0
The original Nikko software was built for the Windows XP era and does not work reliably on modern systems such as Windows 10 and Windows 11.
This app exists to keep the robot usable beyond that original XP-only software stack:
- modern .NET / WinForms application
- fixed working camera path for the Nikko receiver
- RC control without depending on the original bundled app
- focused support for the hardware that still works today
This project is a focused replacement for the original XP-era software. It keeps only the working camera and RC path for this hardware.
This is not a general webcam app. It is intentionally specialized for the Nikko receiver and the current reverse-engineered behavior.
- Detects the Nikko video receiver on the WinUSB interface
- Runs the recovered startup control-transfer sequence
- Switches to the streaming alternate setting and reads isochronous video
- Reassembles TM6000 field/line/block records into a live preview
- Downconverts the packed UYVY stream to the original
352-style display path - Deinterlaces the preview for a more stable live image
- Sends robot movement/camera commands as DTMF through the receiver's audio endpoint
The app is currently hardwired to the known Nikko device identities:
- Video receiver:
VID_6000/PID_0001 - RC audio device:
VID_04D9/PID_2821
For RC audio, the app prefers the endpoint whose Windows property store contains that USB VID/PID. It does not depend on a machine-specific MMDevice GUID.
- Windows
- .NET 9 SDK or runtime
- WinUSB bound to the Nikko video receiver interface
- The Nikko receiver audio endpoint present and enabled for RC features
NuGet dependency:
NAudio 2.2.1
The app talks to the video receiver through WinUSB. If the receiver is still using its original XP-era driver, modern Windows will usually not expose the interface in a way this app can use.
The simplest way to bind WinUSB is with Zadig.
Replace the driver only for the video receiver interface.
Do not replace the driver for:
- the Nikko audio playback device
- unrelated USB audio devices
- unrelated generic USB devices
The RC controls depend on the receiver still exposing its normal USB audio endpoint.
- Plug in the Nikko receiver.
- Start Zadig as administrator.
- Open
Options -> List All Devices. - Find the Nikko video receiver interface.
- Select
WinUSBas the target driver. - Click
Replace DriverorInstall Driver. - Unplug and reconnect the receiver after the install finishes.
Look for the receiver interface associated with:
- USB ID
VID_6000/PID_0001
The app itself prefers the WinUSB interface GUID used by the working video path, but the critical part during driver install is binding the receiver's video interface, not the audio side.
If Zadig shows multiple entries for the same receiver, prefer the one that corresponds to the video capture / WinUSB interface, not the speaker/audio endpoint.
After reconnecting the receiver:
- open
R2D2.NikkoCam - click
Refresh - confirm the receiver appears in the device list
- click
Connect
If the receiver still does not appear, unplug/replug once more and try again.
From the repository root:
dotnet build src\R2D2.NikkoCam\R2D2.NikkoCam.csprojOr with the project-local solution:
dotnet build src\R2D2.NikkoCam\R2D2.NikkoCam.slnOutput:
src\R2D2.NikkoCam\bin\Debug\net9.0-windows\
dotnet run --project src\R2D2.NikkoCam\R2D2.NikkoCam.csprojOr launch:
src\R2D2.NikkoCam\bin\Debug\net9.0-windows\R2D2.NikkoCam.exe
For development, you can also open:
src\R2D2.NikkoCam\R2D2.NikkoCam.sln
Connect/Disconnect: starts or stops the fixed video pathChannel: sends the recoveredCH1toCH4vendor command pair
The drive pad is mapped to DTMF keypad positions:
| Control | DTMF |
|---|---|
| Forward-left | 1 |
| Forward | 2 |
| Forward-right | 3 |
| Pivot left | 4 |
| Camera reactivate | 5 |
| Pivot right | 6 |
| Reverse-right | 7 |
| Reverse | 8 |
| Reverse-left | 9 |
Camera tilt:
| Control | DTMF |
|---|---|
| Up | # |
| Down | * |
Cam is the original camera reactivation function. It is used when the robot is in standby mode and the camera feed must be reawakened.
- Lightsaber control is not implemented yet.
The current app is limited to the verified camera, channel, and RC audio command path. Lightsaber behavior will need separate reverse engineering and implementation.
MainForm.cs- WinForms UI
- user actions
- preview display
- activity log
-
- top-level camera orchestration
- device discovery
- startup fallback across compatible interfaces
-
- WinUSB session lifecycle
- startup sequence execution
- preview loop
- channel control writes
-
Video/Tm6000IsoPacketParser.cs- isoch packet stream -> TM6000 records
-
Video/RollingPreviewAssembler.cs- record aggregation into the current raster
-
- field/block raster build
352transform- preview deinterlace
- bitmap conversion
-
- fixed recovered startup constants and sequence
RobotRcAudioController.cs- RC audio endpoint selection
- WASAPI output lifecycle
- DTMF generation
- The code is intentionally simplified around a single working hardware path.
- Old generic preview enums and alternate display modes were removed on purpose.
- Missing video blocks are carried through a persistent raster instead of being painted black immediately.
- The preview is deinterlaced for usability, even though the raw transport is field-based.
- Disconnect/reconnect is implemented as a full WinUSB session teardown and re-open.
Try:
- unplug and reconnect the video receiver
- click
Refresh - connect again
If the receiver is not responding to USB control requests, the app will fail before preview start.
Check:
- the receiver audio endpoint is present
- Windows did not switch playback away from the Nikko receiver
- the RC button shows the correct
Connect RC/Disconnect RCstate
The app revalidates the RC endpoint, but unplug/replug can still require reconnecting RC manually.
This project is a practical, hardware-specific application built from reverse engineering and live testing. It is intended to stay small, explicit, and focused on the path that actually works for the Nikko R2-D2 receiver.
