VB ve USB'den yalnızca 1 byte

Başlatan jaco33, 05 Mayıs 2009, 06:58:53

jaco33

merhaba,
VB'de mchid adlı dll ile USB'ye tek seferde ancak 1 byte yollayabiliyorum. kalan 63 byte'ı kullanamıyorum.

64 byte'a da liyakatli bir VB uygulaması konusunda yardımınızı istirham ederim.

saygılar

fatihvelid

USB HID cihazın descriptor'unda data büyüklüğü 1 byte olarak tanımlanmış olduğunu tahmin ediyorum. Bu yüzden sadece 1 byte gönderebiliyorsunuzdur.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

jaco33

cevabınız için teşekkür ederim.
pc'den pic'e ekteki program ile bilgi gönderiyorum(sadece 1 byte tabi).
dediğiniz kısım nasıl değiştirilir bilemiyorum.
programı rapid'e yükledim.  yardımcı olmaya devam edebilir misiniz?

vb arayüzü

selamlar

fatihvelid

Microchip USB Stack kullanıyorsanız programınızda mühtemelen Report Count olarak geçiyordur. usb_descriptor.c dosyasında tanımlanmıtır.
Saat 4'e kadar rapid erişimim olmadığı için dosyanı indiremedim. Report oluşturma ile ilgili dökümanları incelemenizi tavsiye ederim. Ayrıca USB IF'nin descriptor tool'unu kullanarak da oluşturabilirsin.
Yanlış bir yeri değiştirsen çalışmayabilir.

Jan Axelson'un USB Complete kitabı güzel bir kaynak.

Kolay gelsin.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

jaco33

hocam beni yanlış anladınız.
pic tarafında sorunum yok. bilgisayar tarafnda sorunum var.
yani sıkıntı VB'de

selamlar

leblebitozu

Hem pic tarafında hem de PC tarafında usb descriptior olarak geçen tanımlamada "report count" olarak geçen değeri istediğin uzunluğa ayarlaman lazım, hem pc'de hem pic'te aynı değer olacak ve ancak o uzunlukta veri alıp/gönderebilirsin. Önceki mesajını da dikkate alırsak PIC tarafında da sorunun var.

Aşağıdaki topic'te de buna değinmiştik

https://www.picproje.org/index.php/topic,24713&highlight=

jaco33

çok teşekkür ederim. konusu varmış görmemişim, özür dilerim.

en yakın zmanda deneyeceğim.

saygılar

jaco33

pic descriptor'u:
unsigned char const HID_INPUT_REPORT_BYTES      = 1;
unsigned char const HID_OUTPUT_REPORT_BYTES     = 1;

iken aşağıdaki gibi:

unsigned char const HID_INPUT_REPORT_BYTES      = 64;
unsigned char const HID_OUTPUT_REPORT_BYTES     = 64;

VB tarafını:
unsigned char const HID_INPUT_REPORT_BYTES      = 8;
unsigned char const HID_OUTPUT_REPORT_BYTES     = 8;

iken aşağıdaki gibi:

unsigned char const HID_INPUT_REPORT_BYTES      = 64;
unsigned char const HID_OUTPUT_REPORT_BYTES     = 64;

yaptım ve mesela pic'in 12.buffer'da 6 rakkamını gördüğünde RB2'yi 1 yapması için:

if(userWR_buffer[12]==6)PORTB.F2=1;

VB'de hangi komutu yazmalıyım?

BufferOut(12) = 6
hidWriteEx VendorID, ProductID, BufferOut(0)

yazdım olmadı:(

jaco33

bendeki kaynak kodlarda(micro c) bug varmış. alıcı buffer ile vericiler karışmış.

ayrıca VB'de gönderiyi aşağıdaki gibi yaptıgımda sorun olmuyor sanırım.
11 rakkamını pic'in 12.buffer'ına göndermek için:

BufferOut(1) = 0
BufferOut(2) = 0
BufferOut(3) = 0
BufferOut(4) = 0
BufferOut(5) = 0
BufferOut(6) = 0
BufferOut(7) = 0
BufferOut(8) = 0
BufferOut(9) = 0
BufferOut(10) = 0
BufferOut(11) = 0
BufferOut(12) = 0
BufferOut(13) = 11
BufferOut(14) = 0
BufferOut(15) = 0
BufferOut(16) = 0
BufferOut(17) = 0
BufferOut(18) = 0
BufferOut(19) = 0
hidWriteEx VendorID, ProductID, BufferOut(0)

şimdi sorun kalmadı.