Bos USB Descriptorlerinin icini yapilacak tasarima gore doldurmak

Başlatan bunalmis, 26 Ocak 2011, 17:06:16

ErsinErce

Alıntı yapılan: bunalmis - 26 Ocak 2011, 22:19:54
bConfigurationValue=Anlamadim
iConfiguration=Anlamadim

bConfigurationValue => multidevice kullanım yaparken birden fazla konfigürasyon tanımlanıyor demiştim burda o konfigürasyonlara index atıyoruz (1,2...)
iConfiguration => konfigürasyonun kullanacağı string'in index'ini buraya yazıyoruz (1. string,2.string,...) Bu stringleri de aşağıda tanımlıyacağız.

t2


t2

Alıntı yapılan: bunalmis - 27 Ocak 2011, 00:15:33
Boyle bir cihazin tum descriptorlerini olusturabilmek adina,  kes yapistir degistir mantigiyla ornek herhangi bir cihazin descriptorlerini modifiye edip al senin olusturmak istedigin descriptorler iste bunlar deyip buraya koyarsan, degiskenlerin hemen sagina aciklamalari yazar ve isi hizlandiririz.
Bunu hazır örneğini upload etmiştim zaten galiba mesajı okumadın. header dosyası istemişsin ben tüm dosyaları gönderdim. microchipn genel amaçlı hid örneği var.
https://www.picproje.org/index.php/topic,31499.msg220050.html#msg220050

z

okudum okumasina da tablodaki degerlerinin anlamini anlamayinca devam edesim gelmedi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: cynetron - 27 Ocak 2011, 00:18:02
Alıntı yapılan: bunalmis - 26 Ocak 2011, 22:19:54
bConfigurationValue=Anlamadim
iConfiguration=Anlamadim

bConfigurationValue => multidevice kullanım yaparken birden fazla konfigürasyon tanımlanıyor demiştim burda o konfigürasyonlara index atıyoruz (1,2...)
iConfiguration => konfigürasyonun kullanacağı string'in index'ini buraya yazıyoruz (1. string,2.string,...) Bu stringleri de aşağıda tanımlıyacağız.

Bu durumda benim ornegimde tek konfigurasyon olacagina gore

bConfigurationValue=1
iConfiguration=0 diyesim geliyor fakat

Device descriptordeki

iManufacturer=XXXX
iProduct=YYYY
iSerialNumber=ZZZZ

degiskenleri de string alanindan deger almayacaklarmiydi. Bu durumda iConfiguration=3 yazasim geliyor fakat orneklerde 0 goruyorum.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Tanımlama yaptığımız yerin en alt kısmında stringlere (Cihazı taktığımızda bilgisayarın gördüğü isim) index atıyoruz, o indexlerden hangisini kullandığımızı buraya yazıyoruz

ErsinErce

Bu örnekte görüldüğü gibi...
;
; This file contains a set of descriptors for a CDC Virtual serial com interface.
;
#define  __EP0_BUFF_SIZE         8         ; 8, 16, 32, or 64
#define  __MAX_NUM_INT           1         ; For tracking Alternate Setting
#define  __MAX_EP_NUMBER         3         ; UEP3
#define  __NUM_CONFIGURATIONS    1
#define  __NUM_INTERFACES        2

#define  __MODE_PP               _PPBM0
#define  __UCFG_VAL              _PUEN | _TRINT | _FS | __MODE_PP  ; Set bus for Full Speed

#define __USB_USE_CDC                      ; Inform the rest of the library subroutines that we're using a CDC interface

; CDC
#define __CDC_COMM_INTF_ID        0
#define __CDC_COMM_UEP            UEP2
#define __CDC_INT_BD_IN           __ep2Bi
#define __CDC_INT_EP_SIZE         8
#define __CDC_DATA_INTF_ID        1
#define __CDC_DATA_UEP            UEP3
#define __CDC_BULK_BD_OUT         __ep3Bo
#define __CDC_BULK_OUT_EP_SIZE    64       ; 64 byte output buffer.
#define __CDC_BULK_BD_IN          __ep3Bi
#define __CDC_BULK_IN_EP_SIZE     64       ; 64 byte input buffer

#define __VID_Value 0x04D8                 ; VID (Vendor Id)
#define __PID_Value 0x000A                 ; PID (Product Id)
#define __MAX_POWER 40                     ; Maximum power consumption (in mA)
;
; ------------------------------------------------------------------------------
; This table is polled by the host immediately after USB Reset has been released.
; These fields are application dependent to be modified to meet your specifications.
;
__DeviceDescriptor
  retlw  (__EndDeviceDescriptor - __DeviceDescriptor) / 2  ; Length of this descriptor
  retlw  __DSC_DEV                    ; bDescType Device
  dt     0x10, 0x01                   ; bcd USB Revision 1.10 low byte, high byte
  retlw  __CDC_DEVICE                 ; bDeviceClass
  retlw  0x00                         ; bDeviceSubClass
  retlw  0x00                         ; bDeviceProtocol
  retlw  __EP0_BUFF_SIZE              ; bMaxPacketSize for EP0
  dt     low(__VID_Value), high(__VID_Value)   ; Vendor Id (VID) low byte, high byte
  dt     low(__PID_Value), high(__PID_Value)   ; Product ID (PID) low byte, high byte
  dt     0x00, 0x00                   ; bcd Device Device release number low byte, high byte
  retlw  0x01                         ; iManufacturer Manufacturer string index
  retlw  0x02                         ; iProduct Product string index
  retlw  0x00                         ; iSerialNumber Device serial number string index
  retlw  __NUM_CONFIGURATIONS         ; bNumConfigurations
__EndDeviceDescriptor

; ------------------------------------------------------------------------------
; This table is retrieved by the host after the address has been set.
; This table defines the configurations available for the device.
; See section 9.6.2 of the Rev 1.0 USB specification (page 184).
; These fields are application dependent to be modified to meet your specifications.
;
; Configuration pointer table
__USB_CD_Ptr
__Configs
  db  low ___Config1, high ___Config1
  db  low ___Config1, high ___Config1

; Configuration Descriptor
___Config1
  retlw  9                            ; Length of this descriptor
  retlw  __DSC_CFG                    ; bDescType Configuration
__Config1Len
  retlw  low ((__EndConfig1 - ___Config1) / 2)    ; Length of this configuration
  retlw  high ((__EndConfig1 - ___Config1) / 2)
  retlw  __NUM_INTERFACES             ; Number of interfaces in this configuration
  retlw  0x01                         ; Configuration Value
  retlw  0x02                         ; Index for this configuration ------------------------------------------------------------------------------------------------------------------
  retlw  0x80                         ; bmAttributes
  retlw  (__MAX_POWER * 2)            ; Max power consumption (2X mA)

; Interface Descriptor
  retlw  9                            ; Length of this descriptor
  retlw  __DSC_INTF                   ; DescType Interface
  retlw  0                            ; Interface number
  retlw  0                            ; Alternate setting
  retlw  1                            ; Number of endpoints in this interface
  retlw  __COMM_INTF                  ; Class code
  retlw  __ABSTRACT_CONTROL_MODEL     ; Subclass code
  retlw  __V25TER                     ; Protocol code
  retlw  0                            ; Interface string index

; CDC Class-Specific Descriptors
  retlw  5                            ; bFNLength (USB_CDC_HEADER_FN_DSC)
  retlw  __CS_INTERFACE               ; bDscType
  retlw  __DSC_FN_HEADER              ; bDscSubType
  dt     0x10, 0x01                   ; bcd CDC low byte, high byte

  retlw  4                            ; bFNLength (USB_CDC_ACM_FN_DSC)
  retlw  __CS_INTERFACE               ; bDscType
  retlw  __DSC_FN_ACM                 ; bDscSubType
  retlw  2                            ; bmCapabilities

  retlw  5                            ; bFNLength (USB_CDC_UNION_FN_DSC)
  retlw  __CS_INTERFACE               ; bDscType
  retlw  __DSC_FN_UNION               ; bDscSubType
  retlw  __CDC_COMM_INTF_ID           ; bMasterIntf
  retlw  __CDC_DATA_INTF_ID           ; bSaveIntf0

  retlw  5                            ; bFNLength (USB_CDC_CALL_MGT_FN_DSC)
  retlw  __CS_INTERFACE               ; bDscType
  retlw  __DSC_FN_CALL_MGT            ; bDscSubType
  retlw  0                            ; bmCapabilities
  retlw  __CDC_DATA_INTF_ID           ; bDataInterface

; Endpoint Descriptor
  retlw  7                            ; bLength (USB_EP_DSC)
  retlw  __DSC_EP                     ; bDscType
  retlw  _EP02_IN                     ; bEPAdr
  retlw  3                            ; bmAttributes (_INT)
  retlw  low (__CDC_INT_EP_SIZE)      ; wMaxPktSize
  retlw  high (__CDC_INT_EP_SIZE)
  retlw  2                            ; bInterval

; Interface Descriptor
  retlw  9                            ; Length of this descriptor
  retlw  __DSC_INTF                   ; INTERFACE descriptor type
  retlw  1                            ; Interface Number
  retlw  0                            ; Alternate Setting Number
  retlw  2                            ; Number of endpoints in this intf
  retlw  __DATA_INTF                  ; Class code
  retlw  0                            ; Subclass code
  retlw  __NO_PROTOCOL                ; Protocol code
  retlw  0                            ; Interface string index

; Endpoint Descriptors
  retlw  7                            ; bLength (USB_EP_DSC)
  retlw  __DSC_EP                     ; bDscType
  retlw  _EP03_OUT                    ; bEPAdr
  retlw  2                            ; bmAttributes (_BULK)
  retlw  low (__CDC_BULK_OUT_EP_SIZE) ; wMaxPktSize
  retlw  high (__CDC_BULK_OUT_EP_SIZE)
  retlw  0                            ; bInterval

  retlw  7                            ; bLength (USB_EP_DSC)
  retlw  __DSC_EP                     ; bDscType
  retlw  _EP03_IN                     ; bEPAdr
  retlw  2                            ; bmAttributes (_BULK)
  retlw  low (__CDC_BULK_IN_EP_SIZE)  ; wMaxPktSize
  retlw  high (__CDC_BULK_IN_EP_SIZE)
  retlw  0                            ; bInterval
__EndConfig1


; String pointer table
__USB_SD_Ptr
__Strings
  db  low __String0, high __String0
  db  low __String1, high __String1
  db  low __String2, high __String2   ---------------------------------------------------------------------------------------------------------------------------------
  db  low __String3, high __String3
  db  low __String4, high __String4

__String0
  retlw   (__String1 - __String0) / 2  ; Length of string
  retlw   __DSC_STR                    ; Descriptor type 3
  dt      0x09, 0x04                   ; Language ID (0x0409 as defined by Microsoft)
__String1
  retlw   (__String2 - __String1) / 2
  retlw   __DSC_STR
  dt __VdrNmeStr
__String2                                                           -------------------------------------------------------------------------------------------------------------------------
  retlw   (__String3 - __String2) / 2
  retlw   __DSC_STR
  dt __DvcDscStr
__String3
  retlw   (__String4 - __String3) / 2
  retlw   __DSC_STR
  dt __VerStr
__String4
  retlw   (__String5 - __String4) / 2
  retlw   __DSC_STR
  dt      'C', 0, 'f', 0, 'g', 0, '1', 0
__String5

; Vendor Name String
#define __VdrNmeStr 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'c', 0, 'h', 0, 'i', 0, 'p', 0
; Device Description String
#define __DvcDscStr 'P', 0, 'I', 0, 'C', 0, '1', 0, '8', 0, ' ', 0, 'U', 0, 'S', 0, 'B', 0, ' ', 0, 'C', 0, 'D', 0, 'C', 0       -----------------------------------------------------------------
; Version String
#define __VerStr    'V', 0, '1', 0, '.', 0, '1', 0, 'F', 0, 'S', 0

z

Benim kafamda farkli bir sey var sanirim.

Device descriptorde 3 tane stringe ait index var.

iManufacturer=XXXX
iProduct=YYYY
iSerialNumber=ZZZZ

Birde configurasyon descriptorde karsimiza iconfiguration cikti

ben soyle dusunuyordum

String1  Bunun indexi xxxx yerine yazilacak
String2  Bunun indexi yyyy yerine yazilacak
String3  Bunun indexi zzzz yerine yazilacak
String4  Bunun indexi iconfiguratin yerine yazilacak

Neyse yarin dokumanlara yenibastan bakayim. Bir sey yanlis anladim henuz cozemedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Doğru düşünüyorsunuz stringleri aşağıda oluşturup index numarasını yazacaksınız, elinizde 4 tane string olacak.
konfigürasyondaki çok önemsenmiyor çünkü oluşturacağınız driverda vereceğiniz isim daha baskın geliyor ve o ismi alıyor,
bu yüzden eldeki stringlerden biri tanımlanarak o alan geçiştiriliyor.

z

cynetron Dedigin gibiymis.

T2 nin verdigi PIC2 ye ait tablolardan sorunumu anladim.

Descriptorlerde kullanilmasini istedigimiz stringleri alt alta yaziyoruz ve bunlarin index degerlerini ilgili descriptore isliyoruz.

Eger birbirinin ayni stringler olacaksa stringleri tekrar tekrar yazmiyor ayni indexi ilgili descriptorlerde kullaniyoruz.
Bu durumda genelde 0 oluyor dedigim string indexler aslinda ayni string descriptordeki ilk mesaji verdirme amacini guduyormus.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

T2 nin verdigi descriptorler cok guzel gorunuyor. Aciklama satirlarina Turkce ilaveler yaptigimizda bu baslik HID tipinde USB cihazlarin descriptorlerini ana hatlariyla ogrenmek isteyenler icin mukemmel hale gelecek.

Descriptor 3.sayfaya tasindi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Araya bir saplama yapayim.

Hayirsever bir vatandasin birisi vendor ID ve Product ID icin para odeyip sonrada ayni makinaya bagli usb cihazlarinizda sadece bir tane bu numarada cihaz kullanmaya raziysaniz
alin size hibe ediyorum, dileyen diledigi cipte diledigi uygulamada kullansin. Kullananlarin basina is getirmeyecegim tarzinda bir durum varmi?




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Bu site 10€ ya product id satıyor, her cihaz için 1 tane rahatlıkla alınabilir
http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1

ayrıca microchip kendi VID si üzerinden PID imkanıda veriyor
http://ww1.microchip.com/downloads/en/AppNotes/Application%20for%20USB%20Vendor%20ID%20Sublicense.pdf

Yada 4000$/65535 = 6,1 cent$/ürün olarak picproje olarak toplu olarak VID ve PID alınabilir  ;)

z

Alıntı yapılan: cynetron - 27 Ocak 2011, 03:24:52
Yada 4000$/65535 = 6,1 cent$/ürün olarak picproje olarak toplu olarak VID ve PID alınabilir  ;)

Boyle bir organizasyona sıcak bakanlarla 64 kişilik katılım çok rahat elde edilebilir. 4000/64=63$ maliyeti olur. (Bilemedik 100$)

Adam başı 1000 farklı cihaz yapacak kadar da seçeneğimiz olur. Hesabımda hata yoksa bu organizasyonu hemen başlatalım.

Satın alımı firma adına yapmak şartmı acaba. Picproje organizasyonu olarak satın alma durumumuz olabilirmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Ayrı bir konu açıp sıcak bakanları oraya toplayalım yalnız, buradaki konuyu dağıtmayalım =)
Ayrı kullanımdan ötürü logo kullanımı kısıtı gelebilir, bunların detaylarını o konu başlığı üzerinden devam ettirelim =)