tis al opgelost. theeft flink wat geduld gekost maar tis bijna rond. wat terugkwam blijkt ene relatieve pointer te zijn.

Ik kan nu mooi alle devices overlopen die aangekoppeld zijn . de VID,VIP en de bijbehorende strings opvragen ( als die er zijn tenminste. niet elk device heeft die.
ook het serienummer kan ik opvragen ( opnieuw : als dat er is .. )
Ik kan ook de ganse descriptor analyseren. hoeveel endpoints , max datasize enzovoort.
ben nu nog aant werken om de poweroncsumption en de rset er ook nog uit te peuteren.

Met andere woorden ik ben het VB equivalent aant schrijven van dat test programma wat bij libusb zit.

Je kan devices openen door vid en vip op te geven. In geval dat er meer dan 1 device is met die vid/vip kan je een index passeren.

kheb al ene paar keer iets naar mij muis geschreven ( met als resultaat dat ik ze kan unpluggen en terug inpluggen :p )

volgende stap is een bordje met een ub controller erop en daar wat rommel naartoe blazen.

Gebruik je nu wel of niet de DLL ?

ik gebruik libusb dll inderdaad.
rechtstreeks onder windows kan je alleen hid calls doen of calls naar device die ene driver hebben.... dus die 'intel' code is eigenlijk alleen bruikbaar als je ene driver hebt ... en das net wat ik wil omzielen. drivers schrijven... brrrrrr....

voor driverloze lukt dat niet blijkbaar. je kan daar vanuit 'user space' niet komen.

Libusb lost dat op door libusb.sys. Dat is een kernel mode driver die een doorgeefluik naar de user mode wereld bevat.

als alles goed gaat is de boel tegen eind vanavond klaar
( ik ben de documentatie aant schrijven. ) en dan post ik het.

er zijn 3 dingen klaar

een .bas file (met commentaar) dat de interfacing doet.
een voorbeeldprogramma nagenoeg identiek aan test_usb.exe wat de ganse bus 'probed' en alle parameters ophaalt en toont.

een .cls ( een class ) die al het werk doet .

Methods:

my_device.start (index,vid,pid)
my_device.bulkwrite (endpoint,buffer,size)
my_device.bulkread (endpoint,buffer,count)
... ... ....
my_device.release

Properties :

my_device.vendor (read only property)
my_device.product (read only property)
my_device.serial (read only property)
my_device.error_string ( read only property )

Events :
my_device.error

een voorbeeldje


dim my_device as new usb_device

index=0
no_more=0
do 
  if my_device.start (index,&h341,&hcd00) =1 then
     my_device.release
     debug.print my_device.serial
     index=index+1
  else
     no_more=1
  end if
loop until no_more =1

bovenstaande code 'wandelt' door alle device met een zelfde VID en PID. stel je hebt 5 van die dingen aangesloten ( 5 dezelfde memorysticks bijvoorbeeld )

de bovenstaande code zal ze een voor een openen en hun serie nummers afprinten.

stel dat je totaal niks weet van wat er aangesloten is:
dan geef je gewoon geen vid en vip mee. ( die parameters zijn optional )


dim my_device as new usb_device
dim index 

index=0
while my_device.start(index) =1 
     debug.print "------ Device " & index & " -----------
     debug.print "VID    : " & my_device.vid
     debug.print "PID    : " & my_device.pid
     debug.print "Vendor : " & my_device.vendor
     debug.print "Product: " & my_device.product
     debug.print "Serial : " & my_device.serial
     index=index+1
     my_device.release
wend

zo simpel ist ( nu dan toch :p )

en we zijn weer een grote stap verder.

Ik heb nu bijna dagelijks contact met van de mensen die libusb gemaakt heeft en die ook weet hoe het werkt !

Nu is er een exact duplicaat van het C testprogramma.
Libusb is nu ook aangepast om de STDcalls te kunnen doen.
Er zijn ook een aantal 'helper' functies bijgekomen om het pointer-gemanipuleer op te lossen. De DLL resolved dat nu naar simpeler structuren ( geen linked lists meer )

Dit maakt dat ook voor andere programmeertalen ( waaronder ook C ) het een flink stuk eenvoudiger geworden is.

Ik heb nog flink wat documentatiewerk maar we komen er uit.
De class draait nu ook al properkers met errorhandling en alles. af en toe kwam er nog een crash omdat de DLL geen assumpties maakt. een foute parameter is 'mort subite' ...
de VB class lost die problemen op.

stukje code :


dim my_usbdevice as new USB_device
Private Sub Command1_Click()
    Dim index
    index = 0
    UsbInit
    textbox.Text = ""
    While my_usbdevice.Start(index) <> 0
          msg " Device : " & index
          msg " Product ID : (" & Hex$(my_usbdevice.PID) & ") : " & my_usbdevice.ProductID
          msg " Vendor  ID : (" & Hex$(my_usbdevice.VID) & ") : " & my_usbdevice.VendorID
          msg " Serial nr  : " & my_usbdevice.Serial
          my_usbdevice.Release
          index = index + 1
    Wend
End Sub
sub Msg (txt)
    text1.text=text1.text & txt$ & vbcrlf
end Msg

je kan nu openen zonder vid en vip te kennen
openen met alleen een vid , of openen met vid en vip
de strings en alle descriptors kan je zo aan
en rollen er mooi uit. je kan de ganse usb structuur bewandelen.

nu nog de andere kant ....
initialisatiecode voor een nest processoren.
ik mik op PIC , 8051 ( atmel )
met voorbeeldekes in assembler en picbasic en eventueel c ...
juist genoeg code om de usb structuur op te zetten en endpoints aan te maken . de rest doe je dan zelf.
( usb is dan echt een 'pijp' aan de pc kant : vind dit device , en blaas zoveel bytes naar dat endpoint , of haal zoveel bytes van dat endpoint op.
en langs de nadere kant krijg je een interrupt als er iets toekomt of opgehaald wordt. en tstaat in een buffer.

als er andere targets zijn ... laat maar weten

hopelijk kunnen we hierna al die seriele poorten in de vuilbak smijten, en wordt het maken van usb devices even simpel als een weerstandje aan een ledje hangen...

mooi werk F_E! nog hulp in VB nodig?

je hebt die gasten gewoon gemaild, "Hey doet eens ff helpen?!!" >:)

USB is ook wel iets meer van de tijd he? mooi man.
De code is wel iets uitgebreider dan rs232. (natuurlijk heeft vb MScomm.ocx)

met VB niet nee. met C(rap) en C(rap)++ misschien later nog wel >:)

(TIS OM TE LACHEN HE !. zie dat ze hier weer beginnen flamen ... . Ik weet het, ik moet dringend eens een echte programmeertaal leren. Heeft er nog iemand het originele boek van Kemeny en Kurtz over de Basic met lijnnumers ? >:) , Anders is Basica van IBM wat in de ROm zat ook goed hoor. Kzal ook al vast maar zien om 'edlin' geinstalleerd te krijgen onder windows. kwestie van een goeie editor te hebben (VI is voor watjes))

enfin. de boel bolt nu.
er wordt nog ene beetje gesleuteld aan de DLL ( versie opvragen moeten we nog implementeren ) , alsook aan de Class

hier staat ie :

http://www.uploadarchief.net/files/download/USB%20vb.zip

Opgelet. Zorg dat je de laatste LibUSB en SYS driver hebt van Sourceforge.

Om Miserie te vermijden : het gaat om deze :

http://sourceforge.net/project/showfiles.php?group_id=78138&packag…

en je hebt de EXE file nodig ( libusb-win32-filter-bin-20060827.exe )

Lanceer die installer. Dit zorgt dat je de laatste Libusb.DLL en LibUSB.SYS hebt en dat de services geinstalleerd zijn en lopen.

Daarnaa kan je de boel zo lopen.
als je ene programma maakt met die VB code moet je ook libusbvb0.dll meegeven. dat is de wrapper library die alle pointer-shuffling doet ( de cdecl naar STDcall translatie )

om compatibility redenen kan de libusb0 niet aangepast worden ( dat spul moet blijven werken voor cygwin en al die andere vanaf linux geporteerde tools, en die werken alleen met cdecl calls. )

Dus daarvoor is die wrapper nodig.

Als je de Class gaat gebruiken in je project moet je zowel libusb.bas als usb_device.cls toevoegen aan je vb project.

ik ga nog een mini_libusb.bas maken die allen usbinit bevat (das de enige call die je nodig hebt buiten de class) ik kan die niet aanroepen vanuit de class omdat ik daarmee alle handles voor andere instances zou vernietigen. wat maakt dat je niet met meer dan 1 device teglijk zou kunnen bezig zijn. usb_init mag maar 1 keer aangeroepen worden in je programma.

En dan gaan we dat ook nog eens porteren naar VB2005 ...

'k krijg een beetje kriebels van al die DLL versies.
of is dit de laatste?
oeh, c kan ik (nog) niet,

Op 10 januari 2007 04:01:11 schreef free_electron:
>:) , Anders is Basica van IBM wat in de ROm zat ook goed hoor.

basicA ? 'k heb een boekje:
Progcursus Mcirosoft BASIC (ook voor GW basis en BASICA)
geschreven door Nok van veen.
Eerste druk: 06-1983
voor oa CommodorePC 10, Tulip sysstem1, Corona, Philips P2500. ma die zal het wel nie weze >:)

>:) zeg f_e, je had toch zo weinigtijd voor de CO_scoop? en dan ga je een beetje zitten proggen, zeg da ken nie hoor :P

Op 10 januari 2007 04:01:11 schreef free_electron:
met VB niet nee. met C(rap) en C(rap)++ misschien later nog wel >:)

(TIS OM TE LACHEN HE !. zie dat ze hier weer beginnen flamen ... . Ik weet het, ik moet dringend eens een echte programmeertaal leren. Heeft er nog iemand het originele boek van Kemeny en Kurtz over de Basic met lijnnumers ? >:) , Anders is Basica van IBM wat in de ROm zat ook goed hoor.

Ach, deze gaat ook wel hoor.
En wil je het goed onder de knie wilt krijgen, begin dan hier :-)

Net 'test_libusb.exe' getest, de PIC Device wordt netjes herkend.

Data naar de PIC sturen ziet er in Delphi zo uit:
request := 1;
value := 0;
index := 1;
If assigned(usbDev) then Fout:= usb_control_msg(usbDev, USB_TYPE_VENDOR OR USB_RECIP_DEVICE, request, value, index, buffer, 0, 100);

Hoe stuur je in VB data naar de PIC ?

usbcontrolmsg ( my_handle,usb_type_vendor or usb_recip_device,request,value,index,buffer,0,100 )

zekerst ?

juist het zelfde.

maar met die class wordt dat simpeler . nog efkes geduld.

ik snap wel niet waarom je control_msg stuurt ...

(TIS OM TE LACHEN HE !. zie dat ze hier weer beginnen flamen ... . Ik weet het, ik moet dringend eens een echte programmeertaal leren. Heeft er nog iemand het originele boek van Kemeny en Kurtz over de Basic met lijnnumers ? , Anders is Basica van IBM wat in de ROm zat ook goed hoor. Kzal ook al vast maar zien om 'edlin' geinstalleerd te krijgen onder windows. kwestie van een goeie editor te hebben (VI is voor watjes))

Nou ja, ach als je zelf al zegt dat je weet wat voor flames er komen. Is het dan niet een beetje zo?
VB is een geweldige taal. Maar waarom is het zo dat het gros van de programma's in laten zoals C C++ Java C# wordt geschreven en niet in VB. Ach ik neem je een beetje in de zeik, maar ik ben wel van mening dat als je dit al met VB kan, dan kan je veel meer in de C related talen. Het is alleen even wennen......

Mijn grootste frustratie is dat je met geen enkel andere taal ( buiten Vb om ) interactief kan debuggen.
programma in break zetten , 2 lijnen aanpassen , execution pointer verplaatsen , zonder te moeten hercompileren en MET behoud van data.

stel je hebt ene programma wat heel lang loopt. telkens na ongeveer 2 uur blokkeert het ... begin maar hoor in c .... 2 lijnen anapassen , hercompileren en opnieuw starten en hopen dat het deze keer wel goed gaat...

in vb : zet de boel in break als het probleem zich voordoet en je kan er net zolang aan frutselen tot je het probleem snapt en kan oplossen.

zo heb ik het met die libusb ook gedaan.

ik zet daar een aantal breakpoints in de sourcecode en ga dan in het 'immediate window' gewoon vb code uitvoeren in realtime. ik kan rondneuzen in memory , variabelen aanpassen en vanalles en nog wat.

der is niks krachtiger en leerrijker dan hands-on interactief te kunnen rondkoteren overal.

probeer dat maar eens in C ( of in eendert welke andere taal .... breakpoints zetten en variabelen opvragen lukt nog. de inhoud van een variablele veranderen is al een stuk moeilijker en in de meeste gevallen onmogelijk. efkes een of andere routine aanroepen tussendoor gaat helemaal niet, en de execution pointer verplaatsen kan ook al niet. triestig hoor. we zijn 2007 : get with it ! Zelfs in de tijd van de ponskaarten kon dat al. ( je kon een PDP11 in break zetten en efkes iets anders doen tussendoor ) ditto op veel van die andere 'monsters'

ik geef een stom voorbeeld. je hebt een programma wat data vergadert en in ram zet. op een bepaald punt schrijf je die weg naar een file. die file bevindt zich op een harde schijf op een server en die is nu net offline gegaan.... kiss your data goodbye.
in VB : runtime error . ga in break , je komt op de lijn terecht waar gepoogd is de file te openen. ( das hetgeen wat mislukt is )
pas de filename aan naar een andere naam en disc die wel bestaat , versleep de execution pointer naar de plaats waar die file gepoogd wordt te openen en druk F5.
klaar is kees. niks data kwijt , niks crash.

zo zijn er duizenden scenarios. : error hier ? momenteke ... klikkerdeklik tikkerdetik , opgelost , de boel bolt.
om dingen uit te zoeken is dat geweldig krachtig.

En dan die syntax van C.... al die haakjes en krullekes.
De helft is zo geschreven dat het onleesbaar is. je kan dingen op veel te veel manieren doen.

En waarom moet een regel nu eindigen in een ; ? kan die compiler nu gewoon niet de linefeed gebruiken ? die staat toch in die file die hij moet compileren. maak die compiler wat slimmer. waarom moet ik al dat werk doen ? de computer is er om mij te dienen en niet omgekeerd.

de computer is voor mij nu net geworden als een schroevendraaier : een stuk gereedschap. De tijd dat ik zelf mijn schroevendraaiers maakte is voorbij, ik heb daar geen goesting meer in. ( af en toe is dat toch nog eens nodig zoals nu bij die USB bollenwinkel. )

en Vb code leest als een 'tekst'. 2 jaar later is dat nog 'leesbaar'. Een stuk c 'formules' is al vele meer : miljaar waar zat ik met mijn gedachten. ik weet begot nie meer hoe dat hier in elkaar zit. en ik als doorwinterde c programameur natuurlijk geen commentaar in min code gezet. commentaar is voor watjes. If it was hard to write it should be hard to understand ...

enfin , das mijn visie.

een echte programmeur denkt daar misschien anders over. maar ik ben de eerste om toe te geven dat ik niks ken van programmeren. ik heb het nooit geleerd ( op die 3 onnozole programmatjes in Turbo Pascal uit mijn schooltijd na ) en veel technieken ken ik waarschijnlijk niet. het interesseert mij ook niet. die programmertaal is een stuk gereedschap , en ik gebruik liever ene waar je kan mee rondmodderen en dingen uitproberen hands-on dan ene waar je telkens opnieuw kan beginnen.

zo bedrijf ik ook electronica : pak de scoop, multimeter , soldeerpook en MEET het. 'Papier electronica' is niet voor mij. 2 dagen rekenen en dan schiet het nog in brand als je er stroom op zet ...

Nog zo iets : error tralala in line tralie : missing ';'...
awel zet die ';' daar dan. onnozele compiler !
De compilers zijn zo slim tegenwoordig dat ze u exact kunnen vertellen wat er waar mis is . Dat ze het dan meteen oplossen ook he !

In VB heb je al diene zever niet. Autocompletion behoedt u voor 'tikvauten' (enne, ik ben een krak in tikvauten hoor , lees mij posts maar) en als je ergens aan haakje vergeet of een string vergeet af te sluiten wordt het automatisch proper opgelost door de IDE. En case-sensitive onzin heb je ook al niet. waar is dat nu voor nodig ? gebruik gewoon een andere naam punt uit. De compiler klopt die naam toch plat naar een address , dus tkost u niks penalty.

en een Vb programma kan je al starten met syntax fauten er in. een C programma niet. stap voor stap debuggen is veel makkelijker en minder frustrerend dan eerst 500 syntax problemen oplossen en dan zien dat het algoritme niet juist was ...

enfin genoeg rant en rave.

.NET talen kunnen ook gewoon interactief debuggen. Edit & continue, een immediate window, variabelen bekijken/wijzigen, exceptions afvangen/interactief afhandelen, etc. etc.

Zelfs Visual C++ heeft al jaren edit & continue, code wijzigen en direct doorgaan met je programma kon wel gewoon. Net als execution pointers aanpassen of variabelen wijzigen. Natuurlijk zit je gebonden aan de beperkingen die inherent zijn aan een low level taal, je moet oppassen wat je doet maar dat is ook gewoon iets wat je kan leren.

Zelf heb ik in het verleden veel met VB gewerkt en hoewel het een leuke taal is om te beginnen is het vreselijk qua structuur. Microsoft wil er niet voor niets vanaf en over naar VB.NET.

De syntax is ook maar iets persoonlijks. Geef mij maar accolades en code op meerdere regels in plaats van alles uit te schrijven als tekst.

C(++) heeft z'n functie, het blijft een van de meeste low-level talen die toch nog goed te gebruiken is. Zelf is C# momenteel m'n favoriet en snap ik ook wel het nut van hogere level talen. Het debuggen kan ook veel interactiever en vanwege de extra tussenlaag is die flexibeler dan bij low level talen. Maar VB is daar dus absoluut niet alleen in.

en we gaan verder.

heeft er iemand voorbeelden voor PIC waarbij een USb device gemaakt wordt ? GEEN HID DEVICE !

der zijn voorbeelden zat om een HID device te maken in picbasic, mikrobasic,mbasic picbasic pro , proton + en weetikveel wat.

o en nog iets : zonder precompiled libary ! ik wil de source zien ...

met andere woorden de code die de pic initialiseert.

[Bericht gewijzigd door free_electron op ]

...heeft er iemand voorbeelden voor PIC waarbij een USb device gemaakt wordt ? GEEN HID DEVICE !...

Site: http://pe.ece.olin.edu/ece/projects.html
Code: http://pe.ece.olin.edu/ece/projects/lab1_18F2455.zip

[Bericht gewijzigd door MMSoft op ]

Jep, das ook de code die ik gebruik. Geen HID, maar een vendor specific device. Werkt prima samen met libusb.

free_electron: Lukt het een beetje ?

free_electron: Ik heb je de laatste tijd enkele mailtjes gestuurd, maar hoor niets van je...

die zal wel druk met zn boek zijn.. ?

??? niks gezien ...
stuur nog eens.
gebruik mijne gmail account .

[Bericht gewijzigd door free_electron op ]

Mail komt eraan.

Lukt het een beetje met VB en de DLL libusb0.dll ?

ik heb de boel toch gepost hier ?
de ganse santeboetiek is te donloaden inclusief de voorbeedlcode

Op 10 januari 2007 21:57:16 schreef free_electron:
usbcontrolmsg ( my_handle,usb_type_vendor or usb_recip_device,request,value,index,buffer,0,100 )

zekerst ?

juist het zelfde.

maar met die class wordt dat simpeler . nog efkes geduld.

ik snap wel niet waarom je control_msg stuurt ...

Op 12 januari 2007 01:36:58 schreef free_electron:
en we gaan verder.

heeft er iemand voorbeelden voor PIC waarbij een USb device gemaakt wordt ? GEEN HID DEVICE !
....

Ik had de indruk dat je er nog druk mee bezig was...

[Bericht gewijzigd door MMSoft op ]

ik wacht nog altijd op een voorbeeld met een PIC die geen HID device doet ...