Based on USBKeyboardMouse example. I added USB String Descriptor so mbed reports itself to host not only with VID & PID but also with name of manufacturer, product name, serial number, configuration number and interface name. These can be changed to matching Yours in USBhid.cpp file on lines 88 - 122.

Dependencies:   mbed

Committer:
llumpu
Date:
Thu Sep 08 15:01:33 2011 +0000
Revision:
0:f97b1f255167
Added USB String Descriptor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
llumpu 0:f97b1f255167 1 /* usbdevice.h */
llumpu 0:f97b1f255167 2 /* Generic USB device */
llumpu 0:f97b1f255167 3 /* Copyright (c) Phil Wright 2008 */
llumpu 0:f97b1f255167 4
llumpu 0:f97b1f255167 5 #ifndef USBDEVICE_H
llumpu 0:f97b1f255167 6 #define USBDEVICE_H
llumpu 0:f97b1f255167 7
llumpu 0:f97b1f255167 8 #include "usbdc.h"
llumpu 0:f97b1f255167 9
llumpu 0:f97b1f255167 10 /* Endpoint packet sizes */
llumpu 0:f97b1f255167 11 #define MAX_PACKET_SIZE_EP0 (64)
llumpu 0:f97b1f255167 12
llumpu 0:f97b1f255167 13 /* bmRequestType.dataTransferDirection */
llumpu 0:f97b1f255167 14 #define HOST_TO_DEVICE (0)
llumpu 0:f97b1f255167 15 #define DEVICE_TO_HOST (1)
llumpu 0:f97b1f255167 16
llumpu 0:f97b1f255167 17 /* bmRequestType.Type*/
llumpu 0:f97b1f255167 18 #define STANDARD_TYPE (0)
llumpu 0:f97b1f255167 19 #define CLASS_TYPE (1)
llumpu 0:f97b1f255167 20 #define VENDOR_TYPE (2)
llumpu 0:f97b1f255167 21 #define RESERVED_TYPE (3)
llumpu 0:f97b1f255167 22
llumpu 0:f97b1f255167 23 /* bmRequestType.Recipient */
llumpu 0:f97b1f255167 24 #define DEVICE_RECIPIENT (0)
llumpu 0:f97b1f255167 25 #define INTERFACE_RECIPIENT (1)
llumpu 0:f97b1f255167 26 #define ENDPOINT_RECIPIENT (2)
llumpu 0:f97b1f255167 27 #define OTHER_RECIPIENT (3)
llumpu 0:f97b1f255167 28
llumpu 0:f97b1f255167 29 /* Descriptors */
llumpu 0:f97b1f255167 30 #define DESCRIPTOR_TYPE(wValue) (wValue >> 8)
llumpu 0:f97b1f255167 31 #define DESCRIPTOR_INDEX(wValue) (wValue & 0xff)
llumpu 0:f97b1f255167 32
llumpu 0:f97b1f255167 33 /* Descriptor type */
llumpu 0:f97b1f255167 34 #define DEVICE_DESCRIPTOR (1)
llumpu 0:f97b1f255167 35 #define CONFIGURATION_DESCRIPTOR (2)
llumpu 0:f97b1f255167 36 #define STRING_DESCRIPTOR (3)
llumpu 0:f97b1f255167 37 #define INTERFACE_DESCRIPTOR (4)
llumpu 0:f97b1f255167 38 #define ENDPOINT_DESCRIPTOR (5)
llumpu 0:f97b1f255167 39
llumpu 0:f97b1f255167 40 /*string offset*/
llumpu 0:f97b1f255167 41 #define STRING_OFFSET_LANGID (0)
llumpu 0:f97b1f255167 42 #define STRING_OFFSET_IMANUFACTURER (1)
llumpu 0:f97b1f255167 43 #define STRING_OFFSET_IPRODUCT (2)
llumpu 0:f97b1f255167 44 #define STRING_OFFSET_ISERIAL (3)
llumpu 0:f97b1f255167 45 #define STRING_OFFSET_ICONFIGURATION (4)
llumpu 0:f97b1f255167 46 #define STRING_OFFSET_IINTERFACE (5)
llumpu 0:f97b1f255167 47
llumpu 0:f97b1f255167 48 typedef struct {
llumpu 0:f97b1f255167 49 struct {
llumpu 0:f97b1f255167 50 unsigned char dataTransferDirection;
llumpu 0:f97b1f255167 51 unsigned char Type;
llumpu 0:f97b1f255167 52 unsigned char Recipient;
llumpu 0:f97b1f255167 53 } bmRequestType;
llumpu 0:f97b1f255167 54 unsigned char bRequest;
llumpu 0:f97b1f255167 55 unsigned short wValue;
llumpu 0:f97b1f255167 56 unsigned short wIndex;
llumpu 0:f97b1f255167 57 unsigned short wLength;
llumpu 0:f97b1f255167 58 } SETUP_PACKET;
llumpu 0:f97b1f255167 59
llumpu 0:f97b1f255167 60 typedef struct {
llumpu 0:f97b1f255167 61 SETUP_PACKET setup;
llumpu 0:f97b1f255167 62 unsigned char *ptr;
llumpu 0:f97b1f255167 63 unsigned long remaining;
llumpu 0:f97b1f255167 64 unsigned char direction;
llumpu 0:f97b1f255167 65 bool zlp;
llumpu 0:f97b1f255167 66 } CONTROL_TRANSFER;
llumpu 0:f97b1f255167 67
llumpu 0:f97b1f255167 68 typedef enum {ATTACHED, POWERED, DEFAULT, ADDRESS, CONFIGURED} DEVICE_STATE;
llumpu 0:f97b1f255167 69
llumpu 0:f97b1f255167 70 typedef struct {
llumpu 0:f97b1f255167 71 DEVICE_STATE state;
llumpu 0:f97b1f255167 72 unsigned char configuration;
llumpu 0:f97b1f255167 73 bool suspended;
llumpu 0:f97b1f255167 74 } USB_DEVICE;
llumpu 0:f97b1f255167 75
llumpu 0:f97b1f255167 76 class usbdevice : public usbdc
llumpu 0:f97b1f255167 77 {
llumpu 0:f97b1f255167 78 public:
llumpu 0:f97b1f255167 79 usbdevice();
llumpu 0:f97b1f255167 80 protected:
llumpu 0:f97b1f255167 81 virtual void endpointEventEP0Setup(void);
llumpu 0:f97b1f255167 82 virtual void endpointEventEP0In(void);
llumpu 0:f97b1f255167 83 virtual void endpointEventEP0Out(void);
llumpu 0:f97b1f255167 84 virtual bool requestSetup(void);
llumpu 0:f97b1f255167 85 virtual bool requestOut(void);
llumpu 0:f97b1f255167 86 virtual void deviceEventReset(void);
llumpu 0:f97b1f255167 87 virtual bool requestGetDescriptor(void);
llumpu 0:f97b1f255167 88 bool requestSetAddress(void);
llumpu 0:f97b1f255167 89 virtual bool requestSetConfiguration(void);
llumpu 0:f97b1f255167 90 virtual bool requestGetConfiguration(void);
llumpu 0:f97b1f255167 91 bool requestGetStatus(void);
llumpu 0:f97b1f255167 92 virtual bool requestSetInterface(void);
llumpu 0:f97b1f255167 93 virtual bool requestGetInterface(void);
llumpu 0:f97b1f255167 94 bool requestSetFeature(void);
llumpu 0:f97b1f255167 95 bool requestClearFeature(void);
llumpu 0:f97b1f255167 96 CONTROL_TRANSFER transfer;
llumpu 0:f97b1f255167 97 USB_DEVICE device;
llumpu 0:f97b1f255167 98 private:
llumpu 0:f97b1f255167 99 bool controlIn(void);
llumpu 0:f97b1f255167 100 bool controlOut(void);
llumpu 0:f97b1f255167 101 bool controlSetup(void);
llumpu 0:f97b1f255167 102 void decodeSetupPacket(unsigned char *data, SETUP_PACKET *packet);
llumpu 0:f97b1f255167 103 };
llumpu 0:f97b1f255167 104
llumpu 0:f97b1f255167 105 #endif