Finally, suppose you've developed clone hardware and you *want* it to run using the device driver written by another manufacturer (e.g., Arduino) as described above. Is there a mechanism to do that, apart from spoofing the Vendor ID on your hardware?

Under Windows, the "Arduino driver" is the standard Microsoft serial port driver. The Arduino folks provide a text file that tells the operating system to bind their VID / PID to that kernel driver. Just like countless other people have done with hardware that behaves like a USB serial port.

Finally, suppose you've developed clone hardware and you *want* it to run using the device driver written by another manufacturer (e.g., Arduino) as described above. Is there a mechanism to do that, apart from spoofing the Vendor ID on your hardware?

Under Windows, the "Arduino driver" is the standard Microsoft serial port driver. The Arduino folks provide a text file that tells the operating system to bind their VID / PID to that kernel driver. Just like countless other people have done with hardware that behaves like a USB serial port.

And if you are just using an existing driver as you describe, there is no issue of "signed" versus "unsigned" drivers then?

And does that signing require spending extra money a Microsoft? (Sorry for all the questions; learning something here.)

As far as I know, no, it does not. I believe you just need a "code signing certificate" #(or something very similar). For broad distribution, you will have to purchase it from someone who can digitally sign your certificate with a "root level" certificate (the actually signing is done indirectly and automatically). In the past we've gotten our certificates from Thawte (who was acquired by Veri$ign which broke my heart), Comodo (which caused problems because their root certificate was not generally distributed), and Go Daddy. Arduino obtained their signed certificate from GlobalSign (in Windows go to Properties / Digital Signatures for the arduino.cat file).

If the distribution is "in house", you can generate and "self sign" a certificate. You are responsible for protecting and distributing the root certificate.

In any case, Microsoft does a reasonable job of documenting the requirements and process on their website. If you want more details I suggest spending some time with Google in case I'm leading you astray.

Unless I misunderstand, if your device is a true clone, then there should be no *practical* issue using the Arduino vendor IDs (ethical issues are another matter, of course). There no chance of a "collision" of any kind occurring -- you *want* your unit to identify to the system as an Arduino device in order to use that driver.

Yes, technically that would work. However, it's a little like copying the key for a rental car, then helping yourself to the vehicle whenever it's on the lot.

So really it just boils down to the "theft" of the IDs. Has Arduino ever complained or made their position public on this point? Does the vendor (Arduino) even have the option to allow "sharing" of the ID if they so wanted under the terms of their agreement with USB Forum (if that's the licensing body.)

The way I understand it, no, they don't have this option. The vendor ID is assigned to you as vendor, and TTBOMK it is not permitted to conspire to allow others to use your vendor ID, or to distribute product IDs to other entities.

Finally, suppose you've developed clone hardware and you *want* it to run using the device driver written by another manufacturer (e.g., Arduino) as described above. Is there a mechanism to do that, apart from spoofing the Vendor ID on your hardware?

No. If you spoof the vendor + device ID of the original part (which, together, I call the product ID -- that may or may not be officially correct), you're basically stealing that from the licensed vendor. No one's going to care if you do this on a DIY clone for your own use, but the minute you sell that product, it's likely you'll be reading a cease and desist letter soon. The original author's driver will not acknowledge your compatible device with a different product ID, so you would have to provide your own driver. That's not a big deal, but it does mean that it's not an exact clone anymore -- it's essentially a different device that performs the same function. That's splitting hairs somewhat, but if your users have downloaded and installed the Arduino software, an actual Arduino just works. Your "clone" would also require its own driver to be sourced from your website or included media (yeah right).

I got a little academic with all that talk about device ID collisions before. The gist is, every vendor gets their own vendor ID and due to the threat of device ID collisions (and it being a breach of licensing terms), only the licensed vendor is allowed to use that vendor ID. I should've worded the ending better, since using the same vendor and device ID wouldn't be a "collision" per se if it was meant to emulate the original device, but if a device manufacturer stole the vendor ID and made up device IDs from ones that weren't used by existing devices (for example, using the Uno device ID + 1 or whatever to identify "Brand X Uno Ultimate"...) then you run the risk of collisions. Sorry for the confusion.

Those PSoCs look real nice, I got a CD with the dev software a while back but haven't installed it yet. I'm waiting until I get my workshop up and running so I have some space for tinkering.

Quote

So many eval kits, so little time :-(

It's quite amazing what's available these days and all free or near as dammit to free. I don't know if it's better to play with everything or really get to know one family well. You are obviously going for the first option