usb_put_packet komutu ile çoklu paket gönderimi (18f4550)

Başlatan akuntman, 22 Nisan 2009, 15:52:43

akuntman

merhaba.

#define USB_EP1_TX_SIZE    8
static int8 out_data[5]={5,7,9,11,13};
usb_put_packet (1, out_data, 4, USB_DTS_TOGGLE);  


Komutları ile dizinin ilk 4 byte lık (5,7,9,11) verisinin usb den gönderilmesi gerekir. Fakat işlemci sadece ilk 2 byte ı gönderiyor.  Data_len kısmını 2.3,4 veya 5 yapmam birşeyi değiştirmiyor hep ilk 2 byte gidiyor.

Birçok örnekten faydalandım fakat birşey değişmedi. Acaba Mikroişlemcinin benim bilmediğim bir özelliği mi var da böyle bir kısıtlama yapıyor.

yardımlarınız için teşekkürler

leblebitozu

sanırım HID protocol kullanıyorsun, aşağıdaki şekilde class tanımını içeren bir tanımlama olmalı source'un bir yerinde report count olarak geçen bölümleri istediğin uzunlukta değiştirmen gerekir, aşağıdaki örnekte 5 byte olarak tanımlı, 2 byte gönderebildiğine göre report count değeri 2 olmalı muhtemelen;

 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, 1,        // Usage maximum

     0x15, 0x80,        // Logical minimum (-128)
     0x25, 0x7F,        // Logical maximum (127)

     0x75, 8,        // Report size = 8 (bits)
     0x95, 5,        // Report count = 5 bytes
     0x81, 2,        // Input (Data, Var, Abs)
     0x19, 1,        // Usage minimum
     0x29, 1,        // Usage maximum
     0x75, 8,        // Report size = 8 (bits)
     0x95, 5,        // Report count = 5 bytes
     0x91, 2,        // Output (Data, Var, Abs)
     0xc0            // End Collection
  };

akuntman

ÇOK Teşekkürler;

Teşhis doğrudur. Belirttiğin gibi driverlardan, benim kullandığım "usb_desc_hid.h" dosyasınında report count'u 5 yapınca artık veriler 5 byte olarak gönderiliyor.

Fakat şöyle bir sıkıntı var; şimdi de sadece 5 bytlık veri gönderebiliyorum.

yani: usb_put_packet (1, out_data, 4, USB_DTS_TOGGLE);  dediğimde hiç veri göndermiyor

veya

usb_put_packet (1, out_data, 3, USB_DTS_TOGGLE); dediğimde de hiç veri göndermiyor

sadece

usb_put_packet (1, out_data, 5, USB_DTS_TOGGLE); komutu çalışıyor.

Sanırım Bu da normal değil, istediğm sayıda veri gönderebilmem lazım. Halen üzerinde çalışıyorum. Çözüm bulunca burada belirteceğim.

leblebitozu

report count'a gönderebileceğin maximum boyutu yazabilir ve ancak o şekilde gönderebilirsin başka bir alternatif yok, report count'u büyük tut sanırım max 64 ya da 128 byte olabiliyor tam net hatırlamıyorum. out_data buffer'ini da report count'ta belirlediğin boyutta oluştur. usb_put fonksiyonunda da report count'taki değeri uzunluk olarak gönder.

Aşağıdaki kitabı da okumanı tavsiye ederim

http://rapidshare.com/files/26680000/USB_Complete_-_3._edition_by_Jan_Axelson.pdf.rar

akuntman

İlgilendiğin için tekrar teşekkür ederim.

Şu an bir sorun kalmadı. Gönderdiğin kitap linki çok faydalı bu konularda başka kitap linkleri de verebilirsen sevinirim.