|
|
View previous topic :: View next topic |
Author |
Message |
spilz
Joined: 30 Jan 2012 Posts: 219
|
HID how to change "iManufacturer" and "iProdu |
Posted: Sun Aug 11, 2013 6:37 am |
|
|
Hello,
I'm trying to use HID usb example, everything is doing well, but now, I would like to change "iManufacturer" and "iProduct" name when I connect it to a computer.
How can I do it? Is it in the chip ? or in the driver ?
thanks for your help
Spilz |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Sun Aug 11, 2013 8:46 am |
|
|
Both...
The driver recognises a number the 'PID' (product ID), and 'VID' (vendor ID), and will only load for ones that match what it is written for. These numbers come from the chip.
Legally the PID is _sold_ by the USB org. The holder of a VID, can then sell ranges of product ID's to other companies.
However what is displayed (so for instance 'CCS', and 'SERIAL DEMO'), is in the USB string descriptor from the chip. So these two text strings, can be changed in the chip.
Best Wishes |
|
|
ze.vana
Joined: 11 Jun 2011 Posts: 15
|
|
Posted: Tue Aug 12, 2014 8:31 am |
|
|
Hello mr. Ttelmah
Sorry for reopen this thread, but could you be more specific on this:
"So these two text strings, can be changed in the chip."
Where can I change here the VID and PID?
usb_desc_hid.h
Code: |
const char USB_CLASS_SPECIFIC_DESC[] = {
6, 0, 255, // Usage Page = Vendor Defined
9, 1, // Usage = IO device
0xa1, 1, // Collection = Application
0x19, 1, // Usage minimum
0x29, 8, // Usage maximum
0x15, 0x80, // Logical minimum (-128)
0x25, 0x7F, // Logical maximum (127)
0x75, 8, // Report size = 8 (bits)
0x95, 2, // Report count = 16 bits (2 bytes)
0x81, 2, // Input (Data, Var, Abs)
0x19, 1, // Usage minimum
0x29, 8, // Usage maximum
0x75, 8, // Report size = 8 (bits)
0x95, 2, // Report count = 16 bits (2 bytes)
0x91, 2, // Output (Data, Var, Abs)
0xc0 // End Collection
};
|
I have this VISUAL C# example asking for these Vendor ID and Product ID (0x04D8, 0x0042)
see code above:
WFF_Generic_HID_Demo_3 VISUAL C# 2010
Code: |
public Form1()
{
InitializeComponent();
// Create the USB reference device object (passing VID and PID)
theUsbDemoDevice = new usbDemoDevice(0x04D8, 0x0042);
// Add a listener for usb events
theUsbDemoDevice.usbEvent += new usbDemoDevice.usbEventsHandler(usbEvent_receiver);
// Perform an initial search for the target device
theUsbDemoDevice.findTargetDevice();
}
// Create an instance of the USB reference device
private usbDemoDevice theUsbDemoDevice;
// Listener for USB events
private void usbEvent_receiver(object o, EventArgs e)
{
// Check the status of the USB device and update the form accordingly
if (theUsbDemoDevice.isDeviceAttached)
{
// Device is currently attached
// Update the status label
this.toolStripStatusLabel1.Text = "USB Device is attached";
// Update the form
this.toggleLedStateButton.Enabled = true;
}
else
{
// Device is currently unattached
// Update the status label
this.toolStripStatusLabel1.Text = "USB Device is detached";
// Update the form
this.toggleLedStateButton.Enabled = false;
}
}
|
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Tue Aug 12, 2014 1:14 pm |
|
|
How about just searching in the file for PID or VID?.
It's not in the descriptor.
Just #define USB_CONFIG_PID and USB_CONFIG_VID, before loading the descriptor file. |
|
|
ze.vana
Joined: 11 Jun 2011 Posts: 15
|
|
Posted: Wed Aug 13, 2014 8:33 am |
|
|
Yes I've done searching in all CCS folders and in this Forum about related usb PID, VDI.
I also made your recommended changing, but I think it doesn't make sense because "USB_CONFIG_PID"
is not called anywehere. I'm using example ex_usb_hid.c.
Code: |
///////////////////////////////////////////////////////////////////////////////////////
//How about just searching in the file for PID or VID?. //
//It's not in the descriptor. //
//Just #define USB_CONFIG_PID and USB_CONFIG_VID, before loading the descriptor file.//
///////////////////////////////////////////////////////////////////////////////////////
#define USB_CONFIG_PID 0x0042
#define USB_CONFIG_VID 0x04d8
//////////////////////////////////////////////////////////////////////////////////////
#if __USB_PIC_PERIF__
#if defined(__PCM__)
#include <pic_usb.h> //Microchip PIC16C765 hardware layer for usb.c
#else
#include <pic18_usb.h> //Microchip 18Fxx5x hardware layer for usb.c
#endif
#else
#include <usbn960x.c> //National 960x hardware layer for usb.c
#endif
#include <usb_desc_hid.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports
|
Now I think I'm using a very old compiler (CCS 4.057). Do you think It is the problem? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Thu Aug 14, 2014 1:00 am |
|
|
A #define, is not 'called', but used. It is a macro.
However age is a core problem.
4.057, is _before_ V4, started to produce useable/working code. Do a search here. V4, started to properly work around the mid 4.07x versions. Before this, V3 was better...
In your version, the VID/PID is 'hard coded' in the descriptor. However a search on 'vendor', or 'product' would still find it. |
|
|
ze.vana
Joined: 11 Jun 2011 Posts: 15
|
|
Posted: Thu Aug 14, 2014 1:42 pm |
|
|
Thanks Mister for reply
I'll do that. Your help was very usefull. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|