Using VS2013, netmf 4.3.4.0. working with a CerbuinoNet and connecting a USB HID to the host the device is recognized as unknown device of type 2 (I assume that’s a HID) and can get a device descriptor and working as expected.
But using pretty much the same code on a raptor the same device returns into a failed connect.
I have no explanation why the raptor reacts differently as the Cerbuinos ?
Anyone with an idea.
First the working CerbuinoNet code:
using System;
using Microsoft.SPOT;
// Added namespaces
using GHI.Usb.Host;
using System.Threading;
namespace cerbHID
{
public class Program
{
private static RawDevice raw;
public static void Main()
{
Controller.DeviceConnectFailed += Controller_DeviceConnectFailed;
Controller.JoystickConnected += Controller_JoystickConnected;
Controller.KeyboardConnected += Controller_KeyboardConnected;
Controller.MassStorageConnected += Controller_MassStorageConnected;
Controller.MouseConnected += Controller_MouseConnected;
Controller.UnknownDeviceConnected += Controller_UnknownDeviceConnected;
Controller.UsbSerialConnected += Controller_UsbSerialConnected;
Controller.WebcamConnected += Controller_WebcamConnected;
Controller.Start();
BaseDevice[] allDevs = Controller.GetConnectedDevices();
foreach (BaseDevice usbDev in allDevs)
{
Debug.Print("VID:" + usbDev.VendorId.ToString("X4"));
Debug.Print("PID:" + usbDev.ProductId.ToString("X4"));
}
Thread.Sleep(Timeout.Infinite);
}
static void Controller_WebcamConnected(object sender, Webcam webcam)
{
Debug.Print("Webcam connected.");
webcam.Disconnected += webcam_Disconnected;
}
static void webcam_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Webcam disconnected.");
}
static void Controller_MouseConnected(object sender, Mouse mouse)
{
Debug.Print("Mouse connected.");
mouse.Disconnected += mouse_Disconnected;
}
static void mouse_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Mouse disconnected.");
}
static void Controller_MassStorageConnected(object sender, MassStorage storage)
{
Debug.Print("Mass storage connected.");
storage.Disconnected += storage_Disconnected;
}
static void storage_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Mass storage disconnected.");
}
static void Controller_JoystickConnected(object sender, Joystick joystick)
{
Debug.Print("Joystick connected.");
joystick.Disconnected += joystick_Disconnected;
}
static void joystick_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Joystick connected.");
}
static void Controller_UsbSerialConnected(object sender, UsbSerial usbserial)
{
Debug.Print("Usb Serial connected.");
usbserial.Disconnected += usbserial_Disconnected;
}
static void usbserial_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Usb serial disconnected.");
}
static void Controller_UnknownDeviceConnected(object sender, Controller.UnknownDeviceConnectedEventArgs unknowndevice)
{
Debug.Print("Unknown Device connected.");
Debug.Print(" ID = " + unknowndevice.Id.ToString("X4"));
Debug.Print(" Port = " + unknowndevice.PortNumber);
Debug.Print(" VID = " + unknowndevice.VendorId.ToString("X4"));
Debug.Print(" PID = " + unknowndevice.ProductId.ToString("X4"));
Debug.Print(" Type = " + (BaseDevice.DeviceType)unknowndevice.Type);
raw = new RawDevice(unknowndevice.Id,
unknowndevice.InterfaceIndex,
unknowndevice.VendorId,
unknowndevice.ProductId,
unknowndevice.PortNumber,
BaseDevice.DeviceType.HID);
raw.Disconnected += raw_Disconnected;
GHI.Usb.Descriptors.Device devdesc = raw.GetDeviceDescriptor();
Debug.Print(devdesc.ToString());
}
static void raw_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Raw device disconnected");
}
private static void Controller_DeviceConnectFailed(object sender, EventArgs e)
{
Debug.Print("Failed.");
}
private static void Controller_KeyboardConnected(object sender, Keyboard keyboard)
{
Debug.Print("Keyboard connected.");
keyboard.Disconnected += keyboard_Disconnected;
}
private static void keyboard_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Keyboard disconnected.");
}
}
}
and the Output:
The thread '<No Name>' (0x2) has exited with code 0 (0x0).
Unknown Device connected.
ID = 200126E4
Port = 0
VID = 0FDE
PID = CA01
Type = 2
GHI.Usb.Descriptors.Device
Second the raptor code:
using System;
using Microsoft.SPOT;
// Added namespaces
using GHI.Usb.Host;
using System.Threading;
using Microsoft.SPOT.Hardware;
using Gadgeteer;
using GTM = Gadgeteer.Modules;
namespace raptorHID
{
public class Program
{
private Gadgeteer.Modules.GHIElectronics.USBHost usbHost = new GTM.GHIElectronics.USBHost(7);
private static RawDevice raw;
public static void Main()
{
Controller.DeviceConnectFailed += Controller_DeviceConnectFailed;
Controller.JoystickConnected += Controller_JoystickConnected;
Controller.KeyboardConnected += Controller_KeyboardConnected;
Controller.MassStorageConnected += Controller_MassStorageConnected;
Controller.MouseConnected += Controller_MouseConnected;
Controller.UnknownDeviceConnected += Controller_UnknownDeviceConnected;
Controller.UsbSerialConnected += Controller_UsbSerialConnected;
Controller.WebcamConnected += Controller_WebcamConnected;
Controller.Start();
BaseDevice[] allDevs = Controller.GetConnectedDevices();
foreach (BaseDevice usbDev in allDevs)
{
Debug.Print("VID:" + usbDev.VendorId.ToString("X4"));
Debug.Print("PID:" + usbDev.ProductId.ToString("X4"));
}
Thread.Sleep(Timeout.Infinite);
}
static void Controller_WebcamConnected(object sender, Webcam webcam)
{
Debug.Print("Webcam connected.");
webcam.Disconnected += webcam_Disconnected;
}
static void webcam_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Webcam disconnected.");
}
static void Controller_MouseConnected(object sender, Mouse mouse)
{
Debug.Print("Mouse connected.");
mouse.Disconnected += mouse_Disconnected;
}
static void mouse_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Mouse disconnected.");
}
static void Controller_MassStorageConnected(object sender, MassStorage storage)
{
Debug.Print("Mass storage connected.");
storage.Disconnected += storage_Disconnected;
}
static void storage_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Mass storage disconnected.");
}
static void Controller_JoystickConnected(object sender, Joystick joystick)
{
Debug.Print("Joystick connected.");
joystick.Disconnected += joystick_Disconnected;
}
static void joystick_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Joystick connected.");
}
static void Controller_UsbSerialConnected(object sender, UsbSerial usbserial)
{
Debug.Print("Usb Serial connected.");
usbserial.Disconnected += usbserial_Disconnected;
}
static void usbserial_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Usb serial disconnected.");
}
static void Controller_UnknownDeviceConnected(object sender, Controller.UnknownDeviceConnectedEventArgs unknowndevice)
{
Debug.Print("Unknown Device connected.");
Debug.Print(" ID = " + unknowndevice.Id.ToString("X4"));
Debug.Print(" Port = " + unknowndevice.PortNumber);
Debug.Print(" VID = " + unknowndevice.VendorId.ToString("X4"));
Debug.Print(" PID = " + unknowndevice.ProductId.ToString("X4"));
Debug.Print(" Type = " + (BaseDevice.DeviceType)unknowndevice.Type);
raw = new RawDevice(unknowndevice.Id,
unknowndevice.InterfaceIndex,
unknowndevice.VendorId,
unknowndevice.ProductId,
unknowndevice.PortNumber,
BaseDevice.DeviceType.HID);
raw.Disconnected += raw_Disconnected;
GHI.Usb.Descriptors.Device devdesc = raw.GetDeviceDescriptor();
Debug.Print(devdesc.ToString());
}
static void raw_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Raw device disconnected");
}
private static void Controller_DeviceConnectFailed(object sender, EventArgs e)
{
Debug.Print("Failed.");
}
private static void Controller_KeyboardConnected(object sender, Keyboard keyboard)
{
Debug.Print("Keyboard connected.");
keyboard.Disconnected += keyboard_Disconnected;
}
private static void keyboard_Disconnected(BaseDevice sender, EventArgs e)
{
Debug.Print("Keyboard disconnected.");
}
}
}
And its outcome:
The thread '<No Name>' (0x2) has exited with code 0 (0x0).
Failed.
Failed.
Failed.
Any help would be much appriciated.