iowkit.dll RRS feed

  • General discussion

  • Hallo, ich habe eine große Bitte.

    Ich brauche eine Erweiterung für Small Basic um die iowkit.dll verwenden zu können.

    Ausführliche Informationen gibt es unter www.codemercs.com.

    Kann mir jemand helfen ?

    Thursday, September 19, 2013 6:59 AM

All replies

  • In English.

    Have you tried LDHID in LitDev extension - this may work - connecting to USB Human Interaction Devices (HID).  This is quite a low level interface (bits and bytes), but the API for iowkit is also pretty low level (see here).

    This iowkit.dll is Native C++, so you would need to be confident in C++ and C# / CLR to write extension for it and may have 32/64 bit issues the way SmallBasic is compiled.


    There does look to be a .Net C# P/Invoke interface so it may not be too hard.

    Is anyone else using IO-Warrior?

    • Edited by litdev Thursday, September 19, 2013 10:58 AM
    Thursday, September 19, 2013 10:25 AM
  • Ich habe es schon mit LDHID versucht . Es findet den IO-Warrior aber ich weiß nicht wie ich ihn darüber ansteuern kann. Schön wäre ein Beispielcode.
    Friday, September 20, 2013 8:29 AM
  • I don't have IO-Warrior so cannot give any code for it.

    Please explain what you tried with LDHID, what worked and what didn't.


    1] plug in IW-Warrior USB

    2] Start Small Basic and load the sample LDHID.sb (comes with extension download)

    3] Run this sample - select the IO-Warrior from list and report back

    Friday, September 20, 2013 10:10 AM
  • Ich habe gemacht was Sie vorgeschlagen haben.

    Wenn ich das Programm starte wird mir angezeigt :  Mein Gerät ist verbunden und arbeitet

    3 Input Bytes 3 Output Bytes




    Was muss ich jetzt machen um den IO-Warrior zu steuern.

    Der IO-Warrior ist auf einer Relaisschaltkarte verbaut . Mein Ziel ist natürlich die Relais schalten zu können. Eine Hilfe könnte Ihnen vielleicht noch die IO-Warrior Datasheet.pdf von Codemercs sein.                               Danke für Ihre Bemühungen

    Saturday, September 21, 2013 8:16 AM
  • Good, the LDHID is using just the same windows calls to access the IO-Warrior as the iowkit.dll so we should be able to control it in the same way (hopefully).

    Some experimentation. 

    1] Use the sample LDHID.sb to try setting some bits and bytes  using the "Send Output" button and see what happens if anything.

    2] Try changing something on the IO-Warrior (if possible) and see if the Input changes.

    It is not exactly clear from the documentation what they will do (set pins to on-off?).  Note that if we write an extension to use iowkit.dll, all we will get is an interface to the commands in the documentation so we will still have to work out how to use it.

    Can you show a screenshot of the GraphicsWindow you get using LDHID.sb?

    Also, what is the VID, PID for your device (the number in the TextWindow for the device)?

    3 bytes suggest you have a IO-Warrior24 (3*8=24) - therefore try changing Byte 2 first (but try them all).

    Saturday, September 21, 2013 8:51 AM
  • I also tried the iowkit.dll (some question marks over 32 64 bit versions).

    Download and try this test dll.

    Try command LDIOWarrior.Test()

    Report back, also are you 32 or 64 bit?

    • Edited by litdev Saturday, September 21, 2013 12:01 PM
    Saturday, September 21, 2013 11:03 AM
  • Ich habe Windows XP 32 Bit Version.

    Leider wird beim Versuch Ihre Test dll. zu downloaden angezeigt das die Seite nicht gefunden wird.

    Die VID 07C0 und die PID 1501.

    Einen Screecshot kann ich machen . Wie kann ich diesen an Sie senden?

    Saturday, September 21, 2013 11:33 AM
  • Fixed the link (http:\\ missing).

    You can post an image on this forum by hitting the Insert Image (last icon that looks like a mountain and sun).

    Saturday, September 21, 2013 12:03 PM
  • Habe die Test dll. gerade getstet. Es wird IO-Warrior 24, Seriennummer und die Firmwareversion angezeigt.

    Wenn ich starte werden in kurzen Abständen alle Relais wahllos durchgeschaltet.

    Es ist schon große Freude bei mir.

    Saturday, September 21, 2013 1:01 PM
  • OK so we an connect.

    There doesn't seem to be that much documentation on what values sent do what.  All the sample is doing is sending random numbers to the second Byte.

    Lets try to reproduce using LDHID first.

    Enter 0, 255, 255 for the output and "Send Output"

    Then try some other numbers (0-255) for the second number.

    0, 130, 255

    0, 200, 150

    etc - does anything happen?


    just enter the numbers, no commas in the 3 Output Byte textboxes and Press Send Output

    • Edited by litdev Saturday, September 21, 2013 1:30 PM edit
    Saturday, September 21, 2013 1:25 PM
  • Leider passiert nichts.

    Soll ich es so eingeben.

    Saturday, September 21, 2013 1:52 PM
  • Yes that is how to enter it.

    Probably easier to move to the iowkit.dll.

    Download the test dll again (I have modified it).

    Then try this code (I don't have IOWarrior so it may take a few test tries to get something working).

    count = LDIOWarrior.Initialise()
    TextWindow.WriteLine(count+" Devices Found")
    If (count > 0) Then
      TextWindow.WriteLine("Name "+LDIOWarrior.GetName(0))
      TextWindow.WriteLine("PID "+LDIOWarrior.GetPID(0))
      TextWindow.WriteLine("Report Size "+LDIOWarrior.GetReportSize(0))
      TextWindow.WriteLine("SerialNumber "+LDIOWarrior.GetSerialNumber(0))
      TextWindow.WriteLine("Version "+LDIOWarrior.GetVersion(0))
      data[1] = 0
      data[3] = 0
      For i = 1 To 100
        data[2] = Math.GetRandomNumber(256)-1

    Saturday, September 21, 2013 2:17 PM
  • Ich habe Test gemacht.

    Folgendes Ergebnis:

    Saturday, September 21, 2013 2:56 PM
  • Ok it found 1 device, but did not get the name PID etc and therefore not connected well.

    Try downloading again and retry.

    Saturday, September 21, 2013 3:13 PM
  • Neuer Versuch mit folgendem Ergebnis: Die Relais werden nacheinander durchgeschaltet
    Saturday, September 21, 2013 3:28 PM
  • Good, I think I understand why this worked and the last didn't.

    I have uploaded another test to be sure (to do with how multiple devices are numbered).

    Please try with this code:

    count = LDIOWarrior.Initialise()
    TextWindow.WriteLine(count+" Devices Found")
    If (count > 0) Then
      TextWindow.WriteLine("Name "+LDIOWarrior.GetName(1))
      TextWindow.WriteLine("PID "+LDIOWarrior.GetPID(1))
      TextWindow.WriteLine("Report Size "+LDIOWarrior.GetReportSize(1))
      TextWindow.WriteLine("SerialNumber "+LDIOWarrior.GetSerialNumber(1))
      TextWindow.WriteLine("Version "+LDIOWarrior.GetVersion(1))
      data[1] = 0
      data[3] = 0
      For i = 0 To 255
        data[2] = i

    Saturday, September 21, 2013 3:34 PM
  • Neuer Versuch: Keine Reaktion
    Saturday, September 21, 2013 4:04 PM
  • Delete the for loop - did the PID name etc work?

    Don't need a picture, just yes or no.

    Saturday, September 21, 2013 4:14 PM
  • Alle Daten waren wie im vorhergehenden Versuch
    Saturday, September 21, 2013 4:16 PM
  • So the PID and name is OK, but the write fails.

    Please check that the arguments are as last code I gave:

      data[1] = 0
      data[3] = 0
      For i = 0 To 255
        data[2] = i

    Note the first argument is a 1 now.

    Perhaps just replace all the above with:

      data[1] = 0
      data[3] = 0
      data[2] = 100

    Saturday, September 21, 2013 4:23 PM
  • Neuer Versuch
    Saturday, September 21, 2013 4:58 PM
  • Mmm????

    Not sure - I have made a few changes (mainly tidy  things up so would like to recheck with current code).  I won't fiddle with the code until I get an answer this time!

    Please download and retry - Please use the following code for the write test.

      data[1] = 0
      data[3] = 0
      data[2] = 100
      result = LDIOWarrior.Write(1,0,data)
      TextWindow.WriteLine("Write Result "+result)

    Saturday, September 21, 2013 5:09 PM
  • Leider funktioniert es so nicht. Ich muß für heute auch beenden und bedanke mich für Ihre Arbeit .
    Saturday, September 21, 2013 5:55 PM
  • This required the new download I mentioned in last post (LDIOWarrior.Write return bytes written - one reason I added this was to be sure we were using same version).

    Perhaps I uploaded wrong or you didn't download.

    Either way I will re-upload and whenever you want to continue post back here.

    Have a good evening.

    Saturday, September 21, 2013 6:10 PM
  • Guten Morgen und einen schönen Sonntag.

    Ich habe die letzte Version von gestern nochmal geladen und installiert mit dem Ergebnis das der Warrior erkannt wird aber die VID, PID, Name und Serienummer nicht angezeiget werden. Man kann aber mit dem Warrior kommunizieren. Ich habe schon viele Versuche gemacht die Relais zu schalten. Beispielsweise schaltet bei data[1] = 0, data[2] = 247, data[3] = 247 das Relais 4 auf der Karte. Es gibt aber auch andere Kombinationen bei welcher auch das Relais 4 geschaltet wird. Auf alle Fälle muss data[1] immer 0 sein.

    Sunday, September 22, 2013 8:48 AM
  • Please confirm that the Name, PID etc is NOT found correctly.  Perhaps a screen shot to absolutely sure, the German translation is not absolutely clear.

    If this doesn't work, then the rest wont - it means that my understanding of the numbering is wrong or I have implemented it wrongly.

    There are cases when relay 1 is not 0, for example for using special mode like LCD - we can test this later, but only when the standard operations work.

    Sunday, September 22, 2013 9:09 AM
  • Sunday, September 22, 2013 9:17 AM
  • I have added some debug outputs - please download and report.
    Sunday, September 22, 2013 9:27 AM
  • Sunday, September 22, 2013 9:44 AM
  • Not what I was expecting!

    Uploaded code with more debug output - there may be quite a bit, so I really just want what is at the top of the TextWindow.

    This is a bit tedious testing by remote but I think we will sort it if you can stick with it.

    Sunday, September 22, 2013 12:26 PM
  • Auf ein Neues
    Sunday, September 22, 2013 12:40 PM
  • A ha!

    You look like you are using id 0, not 1 for the deivice!

    Try replacing the 0 with 1 like this code.

    count = LDIOWarrior.Initialise()
    TextWindow.WriteLine(count+" Devices Found")
    If (count > 0) Then
      TextWindow.WriteLine("Name "+LDIOWarrior.GetName(1))
      TextWindow.WriteLine("PID "+LDIOWarrior.GetPID(1))
      TextWindow.WriteLine("Report Size "+LDIOWarrior.GetReportSize(1))
      TextWindow.WriteLine("Special Report Size "+LDIOWarrior.GetSpecialReportSize(1))
      TextWindow.WriteLine("SerialNumber "+LDIOWarrior.GetSerialNumber(1))
      TextWindow.WriteLine("Version "+LDIOWarrior.GetVersion(1))
      data = ""
      For i = 1 To LDIOWarrior.GetReportSize(1)
        data[i] = 0
      For i = 0 To 255
        data[2] = i
        result = LDIOWarrior.Write(1,0,data)

    Sunday, September 22, 2013 12:43 PM
  • Sunday, September 22, 2013 1:09 PM
  • Good, this all came about because I wrongly assumed at the start they were indexed from 0, then discovered they were indexed from 1 - slow to debug remotely, but we got there.

    Should be all working now!

    Uploaded previous version (same as current without the debugging output).

    Do you have an LCD on this IOWarrior? - If you have, just as a wild guess (not expecting much) try running this code, import XDQ106 (use the import button on SB IDE and paste XDQ106).

    Based on http://www.codemercs.com/uploads/tx_sbdownloader/IOWarrior_Datasheet_01.pdf which is not very clear, and a sample VB code they give.

    Sunday, September 22, 2013 1:14 PM
  • Ich habe kein LCD 
    Sunday, September 22, 2013 1:26 PM
  • Get the download (without debug output).

    Try the sample I showed to import, XDQ106.

    1] Check the name, PID etc (YES or NO)

    2] Check the pins changing (YES or NO)

    3] Check the LCD (YES or NO)

    I only need YES or NO for these (no screenshot).  I expect 1 and 2 YES, and 3 probably NO, but if we are very lucky YES.

    Sunday, September 22, 2013 1:47 PM
  • Entschuldigung ich hatte die neue version noch nicht geladen machmal ist es mit der Übersetzung schwierig.
    Sunday, September 22, 2013 1:50 PM
  • Das ist aktuelles Ergebnis
    Sunday, September 22, 2013 1:53 PM
  • Sure I've been using Google and Bing translate and they are not the same, so that it why I wanted screenshots to be very clear.
    Sunday, September 22, 2013 1:53 PM
  • 1] Check the name, PID etc (YES)

    2] Check the pins changing (YES or NO)

    3] Check the LCD (YES or NO)

    So the answer to question 1 is YES

    What about 2 and 3 using import XDQ106?

    Sunday, September 22, 2013 2:14 PM
  • 1) Ja



    Sunday, September 22, 2013 2:20 PM
  • Ich muss nochmal versuchen klarzustellen. 

    Ich habe kein LCD.

    Der IO-Warrior ist auf einer Relais-Schaltkarte eingebaut.

    Er schaltet 10 Relais und 10 LED die anzeigen welches Relais an oder aus ist.

    Sunday, September 22, 2013 2:27 PM
  • Sorry, translation error.

    Is it all working then?

    Sunday, September 22, 2013 2:43 PM
  • Ja mit der letzten Version werden die Relais wild durchgeschaltet.
    Sunday, September 22, 2013 2:47 PM
  • Great,

    Try playing with the Small Basic code, perhaps also look at the Read (a bit more complicated because there are 2 types (blocking and non-blocking) but I leave that for you to try out and test.

    Good luck.

    Sunday, September 22, 2013 3:08 PM
  • Ich bedanke mich für Ihre Arbeit und Geduld.

    Ich werde mein Glück versuchen und hoffe das Sie mir bei weitern Fragen zur Seite stehen.

    Gruß Eddch

    Sunday, September 22, 2013 3:14 PM
  • Ich habe noch eine Frage welch Argumente benötigt: LDIOWarrior.Write und LDIOWarrior.Read .
    Sunday, September 22, 2013 6:28 PM
  • Habe Eure Diskussion verfolgt und die LitDev.De.xml nebenbei übersetzt.

    Hier ist die deutsche Hilfe für die letzte LitDev_v1.0-Test.zip die LitDev raufgestellt hat.


    (FileDatum der LitDev_v1.0-Test.zip  ist/war  22.09.13  15:14)

    LDIOWarrior.Read(id, channel, blocking, count)

    returns:  Ein Array der zu lesenden Bytes (0 bis 255)

    LDIOWarrior.Write(id, channel, data)

    returns: Die Anzahl erfolgreich geschriebener Bytes


    id .. Die Gerätenummmer (indexiert ab 1)

    channel .. Der Lese/Schreib -kanal (indexiert ab 0)

    blocking .. "True" (Rückgabe nach einer Statusänderung) oder "False" (Rückgabe mit aktuellem Status)

    count .. Die Anzahl zu lesender Bytes. Wenn null, wird Berichtgröße 'ReportSize' verwendet für Kanal 0 bzw. 'SpecialReportSize' für Kanal 1).
                s. GetReportSize und GetSpecialReportSize

    data .. Ein Array der zu sendenden Bytes (0 bis 255).
                Die Arraygröße sollte betragen 'ReportSize' für Kanal 0 bzw. 'SpecialReportSize' für Kanal 1.
                s. GetReportSize und GetSpecialReportSize

    • Edited by Pappa LapubEditor Sunday, September 22, 2013 7:03 PM returns vergessen (Nachtrag)
    Sunday, September 22, 2013 6:49 PM
  • Thanks, Pappa Lapub.

    I have updated this test version to the main download - didn't want to do this while lots of changes going on.  There may be some changes again, but the main bits seem to work.  We didn't test the read, but I don't expect problems now the write works.  The German translation should help Eddch (I have since changed a bit since your previous post translation (mostly cosmetic), and these changes are in the uploaded version).

    • Edited by litdev Sunday, September 22, 2013 9:38 PM clarify
    Sunday, September 22, 2013 7:11 PM
  • Just downloaded. I'll go through it and post new link to de.xml, when changes are clear. Other link removed.

    Edit: Ah, i see. Just a few lines changed.

    Updated here:


    Good night

    Sunday, September 22, 2013 9:09 PM
  • Hallo Pappa Lapub,

    habe mir gerade die neue LitDevDe geladen .

    Sehr gut gemacht .

    Danke !

    Monday, September 23, 2013 2:37 PM
  • Sehr gut gemacht .

    Ja, danke schön. Kann das aber nur gleich an LitDev himself weitergeben, der sich da so reingekniet hat.

    APropos: Wollte fragen was Du mit dem IOWarrior so machst, bzw. gibst mir ev. einige Anregungen für Einsatzbereiche. Wenn man nicht grad Elektroechniker ist und nicht grad nen Lego/Matador/Fischertechnik Roboarm zu steuern hat. Bin nämlich am überlegen, mir auch so ein Teil zuzulegen, wenn ich mal Ahnung habe, wofür ich ihn alles gebrauchen könnte.

    Hab außerdem noch Übersetzungen der meisten/aller anderen Ext. (wenn auch zT. nicht vollständig. Zeit- und Musemangel)

    Monday, September 23, 2013 3:26 PM
  • Am besten Du schaust mal bei www. codermercs.com .

    Dort erfährst du alles was man mit dem IO-Warrior machen kann.

    Bei mir ist er auf einer USB Relaischaltkarte verbaut mit der kann man dann eigentlich schalten was man will.

    In meinem Fall soll  eine Modelleisenbahn gesteuert werden.

    Tuesday, September 24, 2013 3:19 PM
  • Ne also, das finde ich mal ne tolle Idee seine Anlage über SB als selbstprogrammierbare Steuerung anzufahren. Da sehe ich LED-Lichterketten und allen möglichen Schick-Schnack vom Feinsten. Echt toll und super Möglickkeiten. Da kannst zB. auch gleich per SB-Lautsprecherdurchsage ausgeben: "Bitte zurücktreten von der Bahnsteigkante. Der Night Train nach Winwood fährt soeben ab". Hast mich damit auch auf eine neue SB-Idee gebracht. zB. statt LED-Spektakel nur Piepser (Weihnachten steht ohnehin bald vor der Tür) Und Eingabe von Text (also Text-To-Morse)


    Friday, September 27, 2013 8:12 PM
  • Hallo LitDev,  ich habe die letzten Tage viel mit LDIOWarrior getestet und auch einige Erfolge erzielt.

    Mit der Operation LDIOWarrior.Read komme ich nicht zurecht. Sie bewirkt nichts und gibt auch nichts zurück.

    Was könnte ich damit überhaupt erreichen ?

    Tuesday, October 1, 2013 11:47 AM
  • Kann sein, daß Du etwas warten mußt auf LitDev (oder ev. noch mal anfragen). Er schreibt nämlich hier Writing Code am Do, 26. Sept. 20:54, daß er 2 Wochen auswärts arbeitet und das war, glaube ich, auch seine letzte Meldung seitdem.

    Tuesday, October 1, 2013 9:42 PM
  • Hallo Papa Lapub, danke für die Information dann muss ich etwas warten.

    Du hast mal geschrieben das Du dir auch so einen IO-Warrior zulegen willst.

    Vielleicht schaust du mal unter bei www.neotecc.de dort gibt es die USB - Relaischaltkarten.

    Thursday, October 3, 2013 6:56 AM