Support QRP CoA Everywhere

Sunday 28 March 2010

Softrock USB information

I put this up as a place holder...

The USB driver, and then any SDR software, whatever is being used should be looking for some things to identify a USB device and the Firmware on the AVR in a Softrock will also provide these....

In the AVR code the sections are;

#define USB_CFG_VENDOR_ID 0xc0, 0x16 /* 5824 in dec, stands for VOTI */
/* USB vendor ID for the device, low byte first. If you have registered your
* own Vendor ID, define it here. Otherwise you use obdev's free shared
* VID/PID pair. Be sure to read USBID-License.txt for rules!
#define USB_CFG_DEVICE_ID 0xdc, 0x05 /* 1500 in dec, obdev's free PID */
/* This is the ID of the product, low byte first. It is interpreted in the
* scope of the vendor ID. If you have registered your own VID with
* or if you have licensed a PID from somebody else, define it here. Otherwise
* you use obdev's free shared VID/PID pair. Be sure to read the rules in
* USBID-License.txt!
#define USB_CFG_DEVICE_VERSION 0x00, 0x01
/* Version number of the device: Minor number first, then major number.
#define USB_CFG_VENDOR_NAME 'w', 'w', 'w', '.', 'o', 'b', 'd', 'e', 'v', '.', 'a', 't'
/* These two values define the vendor name returned by the USB device. The name
* must be given as a list of characters under single quotes. The characters
* are interpreted as Unicode (UTF-16) entities.
* If you don't want a vendor name string, undefine these macros.
* ALWAYS define a vendor name containing your Internet domain name if you use
* obdev's free shared VID/PID pair. See the file USBID-License.txt for
* details.
#define USB_CFG_DEVICE_NAME 'D', 'G', '8', 'S', 'A', 'Q', '-', 'I', '2', 'C'
/* Same as above for the device name. If you don't want a device name, undefine
* the macros. See the file USBID-License.txt before you assign a name.
#define USB_CFG_SERIAL_NUMBER 'B', 'e', 't', 'a', '1', '.', '1'
/* Same as above for the serial number. If you don't want a serial number,
* undefine the macros.
* It may be useful to provide the serial number through other means than at
* compile time. See the section about descriptor properties below for how
* to fine tune control over USB descriptors such as the string descriptor
* for the serial number.
/* See USB specification if you want to conform to an existing device class.
/* See USB specification if you want to conform to an existing device class or
* protocol.
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 /* total length of report descriptor */
/* Define this to the length of the HID report descriptor, if you implement
* an HID device. Otherwise don't define it or define it to 0.

So anyone that writes software for a Softrock you MUST know what these are.

One of the Softrock V9.0 I have on the bench the AVR will send:
USB_CFG_VENDOR_NAME 'w', 'w', 'w', '.', 'o', 'b', 'd', 'e', 'v', '.', 'a', 't'
USB_CFG_DEVICE_NAME 'D', 'G', '8', 'S', 'A', 'Q', '-', 'I', '2', 'C'
USB_CFG_SERIAL_NUMBER 'B', 'e', 't', 'a', '1', '.', '1'

Now if any SDR software looks at the USB devices and needs to match these before working then all three need to be correct. Obviously you might be able to separately identify each Softrock if you had more than on (and were able to recode your AVR).

What Simon (HB9DRV) was looking for was these three lines the USB/AVR chip would return.

I will be working to make sure we know which versions work and those that don't.

Please don't bombard me with comments about your version being different at this point or claim this will mean SDR-Radio will not work with softrocks.... it will. I say this because I'm doing the SDR-Radio softrock support and I asked for support for Softrocks to be included!
Simon will just use the VID/PID to identify which USB device is being used. The Softrocks tend to all have the VID/PID using the licenced V-USB VID/PID from obdev right now but there are others than have used different details, as PE0FKO usb/AVR code has been hacked/rewritten by some so that their details are different, some will be official, some not (and I fall into the second category as I used a VID/PID combination that worked, different to obdev but is not able to be used outside my shack incase it 'clashes' with a 'real' USB VID/PID.

No comments: