IO-Warrior 28 replacing IO Warrior 24
Moderator: Guido Körber
IO-Warrior 28 replacing IO Warrior 24
I am currently using the IOW24-Dongle, and are quite happy with it. Can I expect that all software, which runs on the 24, will run unchanged on the 28?
It's been a while since I made the software, and I am wondering whether new software / tools have been made available for your new offerings? In particular, my software runs on Python, and I need it to run on Linux, Windows, Mac. My original software is based on IO-Warrior Kit V1.5 and is found as open source here: https://sourceforge.net/projects/i2cpytools/
My Python code was created by converting your C code, which worked, but was a bit cumbersome :-/. Is there perhaps now any Python code available for running these dongles on Linux, Windows, Mac?
Speed is of no concern; it is plenty good already.
It's been a while since I made the software, and I am wondering whether new software / tools have been made available for your new offerings? In particular, my software runs on Python, and I need it to run on Linux, Windows, Mac. My original software is based on IO-Warrior Kit V1.5 and is found as open source here: https://sourceforge.net/projects/i2cpytools/
My Python code was created by converting your C code, which worked, but was a bit cumbersome :-/. Is there perhaps now any Python code available for running these dongles on Linux, Windows, Mac?
Speed is of no concern; it is plenty good already.
- Christoph Jung
- Posts: 672
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: IO-Warrior 28 replacing IO Warrior 24
Hi,
you have to adjust your code to use the IO-Warrior28 instead of IO-Warrior24.
The Reportsize is bigger (like IOW56) and the IOW28 use different pipes for I2C and ADC.
For Windows, Linux and OSX exists a new SDK/API which includes the IOW28.
The IOW28 is also patched into the linux kernel.
Your code must be adjusted, but this is not complicated.
We have no python tools or sample codes, sorry. But if you actual code works the adjustments
will too.
you have to adjust your code to use the IO-Warrior28 instead of IO-Warrior24.
The Reportsize is bigger (like IOW56) and the IOW28 use different pipes for I2C and ADC.
For Windows, Linux and OSX exists a new SDK/API which includes the IOW28.
The IOW28 is also patched into the linux kernel.
Your code must be adjusted, but this is not complicated.
We have no python tools or sample codes, sorry. But if you actual code works the adjustments
will too.
Software developer
Re: IO-Warrior 28 replacing IO Warrior 24
I have now done a review of several USB-To-I2C dongles (USB-ISS, ELV, IO Warrior 24, Adafruit FT232H). The IO Warrior 24 showed a rather dismal performance, e.g. some 10x slower than the best one (the USB-ISS), beating only the Adafruit device.
The results are summarized in my "Review of USB-To-I2C Dongles as used by GeigerLog" downloadable from my Articles page: https://sourceforge.net/projects/geiger ... /Articles/
I have not looked at the IO-Warrior 28. But when you say that the code needs to be "adjusted" it sounds like the old, rather complex programming with everything being wrapped in reports is maintained?
What improvements can I expect from the 28 over the 24?
The results are summarized in my "Review of USB-To-I2C Dongles as used by GeigerLog" downloadable from my Articles page: https://sourceforge.net/projects/geiger ... /Articles/
I have not looked at the IO-Warrior 28. But when you say that the code needs to be "adjusted" it sounds like the old, rather complex programming with everything being wrapped in reports is maintained?
What improvements can I expect from the 28 over the 24?
-
- Site Admin
- Posts: 2862
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: IO-Warrior 28 replacing IO Warrior 24
IO-Warrior28 uses full speed USB, versus the low speed on IOW24. This allows 1000 reports per second and the data payload is 64 bytes versus the 8 on the IOW24. Also it has a dedicated interface for I2C which means the bandwidth is not shared with other functions.
IOW28 can saturate a 400 kHz I2C and comes to more than 2/3 of the limit at 1 MHz. And yes, it can do 10, 50, 100, 400, and 1000 kHz data rates.
Modifications to the code are mostly: Use the dedicated interface instead of interface 1. Change the size of the reports to 64 bytes total, with a data payload of 62 bytes each. And of course detect the IOW28 instead of the IOW24.
IOW28 can saturate a 400 kHz I2C and comes to more than 2/3 of the limit at 1 MHz. And yes, it can do 10, 50, 100, 400, and 1000 kHz data rates.
Modifications to the code are mostly: Use the dedicated interface instead of interface 1. Change the size of the reports to 64 bytes total, with a data payload of 62 bytes each. And of course detect the IOW28 instead of the IOW24.
Re: IO-Warrior 28 replacing IO Warrior 24
Thanks, so the report based programming remains.
I looked at the Linux installation, and among other it says that due to a bug you need to recompile the driver yourself until it is in the kernel. Is it now in the kernel, and, if so, from which kernel onwards?
The kernel module for the 24 is iowarrier. What name will the 28 module have, and can the two coexist, or does the new one support the 24 as well?
Giving my users the task to compile a kernel module may be too much to ask.
I looked at the Linux installation, and among other it says that due to a bug you need to recompile the driver yourself until it is in the kernel. Is it now in the kernel, and, if so, from which kernel onwards?
The kernel module for the 24 is iowarrier. What name will the 28 module have, and can the two coexist, or does the new one support the 24 as well?
Giving my users the task to compile a kernel module may be too much to ask.
- Christoph Jung
- Posts: 672
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: IO-Warrior 28 replacing IO Warrior 24
The IOW28 were added in the kernel 4.14.
The note in our SDK is not up to date. Since 8.2020 the bug was fixed in the kernel drivers. I will replace out SDK, sorry for the confusion about that.
The IOW28 will not replace the IOW24 on driver side or in the kernel. The IOW24 devices can continue to be used as usual and coexist with the IOW28.
If you are using our Linux SDK for the IO-Warrior you have to install the latest one to have access to the IOW28.
The note in our SDK is not up to date. Since 8.2020 the bug was fixed in the kernel drivers. I will replace out SDK, sorry for the confusion about that.
The IOW28 will not replace the IOW24 on driver side or in the kernel. The IOW24 devices can continue to be used as usual and coexist with the IOW28.
If you are using our Linux SDK for the IO-Warrior you have to install the latest one to have access to the IOW28.
Software developer
Re: IO-Warrior 28 replacing IO Warrior 24
I use kernel 4.15, but all I can find with iow* is iowarrior.ko. What is the name of the 28 kernel module?
- Christoph Jung
- Posts: 672
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: IO-Warrior 28 replacing IO Warrior 24
This is the kernel file for all IO-Warrior. If you run "modinfo iowarrior" you should see all io-warriors which loaded.
Software developer
Re: IO-Warrior 28 replacing IO Warrior 24
Sorry, I am not getting it. When I presently run 'modinfo iowarrior' I see this:
And when I insert a iow28, I see an additional and different module though named the same 'iowarrior.ko' and the two coexist and one is for the 24 and the other for the 28? Yet my code only loads 'iowarrior'?
I think I am missing something.
Code: Select all
$ modinfo iowarrior
filename: /lib/modules/4.15.0-142-generic/kernel/drivers/usb/misc/iowarrior.ko
license: GPL
description: USB IO-Warrior driver
author: Christian Lucht <lucht@codemercs.com>
srcversion: CE8F6341AA401805FF2D64D
...
I think I am missing something.
- Christoph Jung
- Posts: 672
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: IO-Warrior 28 replacing IO Warrior 24
If you run "modinfo iowarrior" there must be a bunch of lines which represents the IO-Warrior devices with its
product IDs (PID)
The "alias: usb:v07C0p1504d*dc*dsc*dp*ic*isc*ip*in* " -> IO-Warrior28
There is only one module for the IO-Warrior, the iowarrior.ko. This module will handle all IO-Warrior devices.
If you want to use another device in your application you have to choose them by product ID and serial number.
The IOW28 will replace the IOW24 but application side you have to expand your code.
You can not use the same 1:1 code for the IO-warrior24 and IO-Warrior28. You have to add / edit the ReportSize, IowKitWrite() and IowKitRead() functions for the new report size from 7 Byte to 63 Byte.
product IDs (PID)
Code: Select all
pi@rpi-dev:~ $ modinfo iowarrior
filename: /lib/modules/5.10.63-v7+/kernel/drivers/usb/misc/iowarrior.ko
license: GPL
description: USB IO-Warrior driver
author: Christian Lucht <lucht@codemercs.com>
srcversion: 92DD515200ED650FB612735
alias: usb:v07C0p1506d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1505d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1504d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p158Bd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p158Ad*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1503d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1512d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1511d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1501d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v07C0p1500d*dc*dsc*dp*ic*isc*ip*in*
depends:
intree: Y
name: iowarrior
vermagic: 5.10.63-v7+ SMP mod_unload modversions ARMv7 p2v8
There is only one module for the IO-Warrior, the iowarrior.ko. This module will handle all IO-Warrior devices.
If you want to use another device in your application you have to choose them by product ID and serial number.
The IOW28 will replace the IOW24 but application side you have to expand your code.
You can not use the same 1:1 code for the IO-warrior24 and IO-Warrior28. You have to add / edit the ReportSize, IowKitWrite() and IowKitRead() functions for the new report size from 7 Byte to 63 Byte.
Software developer
Re: IO-Warrior 28 replacing IO Warrior 24
Ok, I see the ID in my "aliases" and the setting in my Python code, so I guess I finally get it ;-) Thanks!