DDRBoxman / picodeck

60 stars 7 forks source link

Windows 10: Device can't be started #2

Closed chris-heo closed 2 years ago

chris-heo commented 2 years ago

Hey there,

cool project, though I ran into a small issue: Dropping the provided firmware file on the Pico, Windows 10 (21H2, Build 19044.1826) will recognize the HW but will not start the device. Device manager shows error code 10, "Device could not be started" and "A non constant main element was declared without a usage" (translated). From what I've seen, Windows seems to be a bit picky (at least more than MacOS/Linux), I also had a look into the source files but couldn't identify a cause right away.

Since I currently got no devenv for the pico installed yet to fix it on my own (and new to the platform), I'd like to at least provide some more info on the issue - so please find the files attached:

wireshark_picodec_norec.pcapng.gz usbtreeview._picodeck_norec.txt

ryantheleach commented 2 years ago

I purchased a Pi Pico to give this a shot and a few other projects.

I'm also encountering this issue.

Restarting the pico does not help.

image

image

image

image

Device USB\VID_0FD9&PID_0086\ZZZZZZZZZZZZZ was not migrated due to partial or ambiguous match.

Last Device Instance Id: RZVIRTUAL\VID_1532&PID_022B&MI_00\8&c5f7532&0&03
Class Guid: {745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Location Path: 
Migration Rank: 0xF000FFFFFFFFF132
Present: false
Status: 0xC0000719

image

ryantheleach commented 2 years ago

For what it's worth, the Device Not Migrated message is standard for the streamdeck.

My StreamDeck XL reports 3 events, "Device not migrated", "Device configured (hidserv.inf)" and "Device started".

It seems strange to me that the pedal is using input.inf and the SD XL, hidserv.inf

ryantheleach commented 2 years ago

If you have tested this against an actual streamdeck pedal on windows, tinyusb examples are indicating that the driver is likely cached.

https://github.com/hathach/tinyusb/blob/master/examples/device/hid_boot_interface/src/usb_descriptors.c#L29-L30

/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug.

  • Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC.

I wonder if it's possible this worked on your machine, but not on fresh installs.

ryantheleach commented 2 years ago

I think I've managed to get this building under windows, but the intellisense isn't setup in vscode is hindering me quite a bit, considering this is my first pico project.

Edit: Not building under windows.

ryantheleach commented 2 years ago

@chris-heo you may find this PR: https://github.com/DDRBoxman/picodeck/pull/3 and this binary useful: https://github.com/ryantheleach/picodeck/suites/7540939756/artifacts/310995661

ryantheleach commented 2 years ago

Ok, so whilst the hardware is being accepted by the operating system as a StreamDeck, it appears I may have incidentally changed how the StreamDeck software see's the device.

Shorting pins 7 and 8, (from floating) does not appear to activate the (centre) Welcome button in software.

This is probably either

  1. my lack of knowledge regarding C macro's biting me in the ass from my cleanup,
  2. using the wrong usages
  3. both
ryantheleach commented 2 years ago

From code:

#define BUTTON_1_GPIO 1
#define BUTTON_2_GPIO 5
#define BUTTON_3_GPIO 9

From readme:

Pins 2,3 switch 1
Pins 7,8 switch 2
Pins 12,13 switch 3

I was getting pin instructions confused with GPIO descriptions.

After correcting this, and shorting 1,5,9 to ground in turn, I found it worked perfectly!

chris-heo commented 2 years ago

Awesome, thanks for looking into this and fixing it! Worked right off 👍