ich habe ein größeres Problem, wo ich nichts zu im Netz finde und ich hoffe hier ist jemand, der mir dort helfen kann.
Ich arbeite in einer kleine Firma, die sich mit USB-Schnittelstellen befasst und wir wollen unsere Beispiele mit Python erweitern.
Nun habe ich einige Skripte unter Windows geschrieben, die auch anstandslos funktionieren.
Nun habe ich das ganze natürlich auf ausgelegt, das es unter Linux auch funtkionieren soll. Wenn ich meine VM mit Ubuntu laufen lasse
und das Skript dort starte bekomme ich auch Daten zurück aus den API-Funktionen.
Nun habe ich das ganze auch auf einem Raspberry versucht und dort Fehlanzeige. Dort kommt überall (außer bei IowKitGetVersion, da kommt ein String) nur 0 zurück. Ich gehe mal davon aus, das es am ARM-Prozessor liegt oder irgend etwas, was ich nicht importiert und umgewandelt habe.
Nun meine eigentliche Frage, weiß jemand Rat, was ich tun kann?
Hier mal ein einfaches Beispiel.
Code: Alles auswählen
#!/usr/bin/env python3.3
import os, sys, atexit, ctypes
from ctypes import *
# Defines
IOW_PIPE_IO_PINS = ctypes.c_ulong(0)
IOW_PIPE_SPECIAL_MODE = ctypes.c_ulong(1)
IOWKIT_PRODUCT_ID_IOW40 = 0x1500
IOWKIT_PRODUCT_ID_IOW24 = 0x1501
IOWKIT_PRODUCT_ID_IOW56 = 0x1503
IOWKIT_MAX_PIPES = ctypes.c_ulong(2)
IOWKIT_MAX_DEVICES = ctypes.c_ulong(16)
IOWKIT_SPECIAL_REPORT = ctypes.c_ubyte * 8
IOWKIT56_SPECIAL_REPORT = ctypes.c_ubyte * 64
IOWKIT56_IO_REPORT = ctypes.c_ubyte * 8
SERIAL_NUMBER_BUFFER = ctypes.c_ubyte * 9
try:
if sys.platform == "linux2":
_lib = ctypes.CDLL("libiowkit.so")
if sys.platform.startswith("win"):
_lib = ctypes.WinDLL('iowkit')
except:
print("Fehler beim Laden der API")
_lib.IowKitOpenDevice.restype = c_ulong
_lib.IowKitOpenDevice.argtype = []
_lib.IowKitCloseDevice.argtypes = None
_lib.IowKitCloseDevice.argtypes = [c_ulong]
_lib.IowKitGetNumDevs.restype = c_ulong
_lib.IowKitVersion.restype = c_char_p
_lib.IowKitGetRevision.restype = c_ulong
#_lib.IowKitGetProductId.argtypes = [ctypes.c_voidp]
#_lib.IowKitGetProductId.restype = ctypes.c_ulong
#_lib.IowKitGetDeviceHandle.argtypes = [ctypes.c_ulong]
#_lib.IowKitGetDeviceHandle.restype = ctypes.c_voidp
#_lib.IowKitSetTimeout.argtypes = [ctypes.c_voidp, ctypes.c_ulong]
#_lib.IowKitWrite.argtypes = [ctypes.c_voidp, ctypes.c_ulong, ctypes.c_voidp, ctypes.c_ulong]
#_lib.IowKitRead.argtypes = [ctypes.c_voidp, ctypes.c_ulong, ctypes.c_voidp, ctypes.c_ulong]
#_lib.IowKitReadImmediate.argtypes = [ctypes.c_voidp, ctypes.POINTER(ctypes.c_ulong)]
# always close devices at exit
# maybe ensure driver version _lib.IowKitVersion() >= 1.4 ?
#atexit.register(_lib.IowKitCloseDevice, None)
print("OS: ", sys.platform)
print("Python Version: ", sys.version)
print("Library: ", _lib)
print("\r\n")
print("DLL Version: ",_lib.IowKitVersion()) #String kommt !
print("Handle: ",_lib.IowKitOpenDevice())
iow = _lib.IowKitOpenDevice()
print ("Handle: ", iow)
print("Revision: ", _lib.IowKitGetRevision(iow))
print("Found Devices: ", _lib.IowKitGetNumDevs())
if iow:
handle = _lib.IowKitGetDeviceHandle(0)
if not handle:
print ("Error DeviceHandle")
print ("IO-Warrior Handle: ", iow)
if not iow:
print ("No Device Found")
_lib.IowKitCloseDevice(iow)
Vielen Dank für eure Hilfe