Brauche Hilfe bei Verwendung einer DLL / Modulerstellung
Verfasst: Mittwoch 16. Juli 2008, 11:24
Hallo Zusammen,
ich habe ein kleines monochromes grafikfähiges LCD, welches per USB an den Rechner angeschlossen wird. Zu diesem Display gibt es eine DLL über die Display angesprochen werden kann. Die Funktionen der DLL sind in einem PDF Dokument beschrieben. In anderen Programmiersprachen habe ich schon einige Programme dafür geschrieben, und jetzt würde ich es gerne in Python probieren (zu Übungszwecken).
Ich habe es soweit auch schon geschaft, dass Display von Python aus anzusprechen, doch leider weiß ich bei einigen Funktionen nicht so ganz, wie ich damit umgehen soll. Speziell geht es da um die Übergabe eines Pointers auf ein Charakter Array. Um es zu konkretisieren habe ich probleme mit der Funktion setBitamp.
Das ist der Code den ich soweit schon entwickelt habe, mit dem ich das Display auch ansprechen kann bzw. ein paar Funktion auf dem Display und der DLL schon ausführen kann:
Die API zu dem Display gibts hier
Ich hoffe ihr könnt mir ein paar Tips geben.
Danke & Gruß
Kornelis
EDIT by Gerold: Code-Tag geändert
ich habe ein kleines monochromes grafikfähiges LCD, welches per USB an den Rechner angeschlossen wird. Zu diesem Display gibt es eine DLL über die Display angesprochen werden kann. Die Funktionen der DLL sind in einem PDF Dokument beschrieben. In anderen Programmiersprachen habe ich schon einige Programme dafür geschrieben, und jetzt würde ich es gerne in Python probieren (zu Übungszwecken).
Ich habe es soweit auch schon geschaft, dass Display von Python aus anzusprechen, doch leider weiß ich bei einigen Funktionen nicht so ganz, wie ich damit umgehen soll. Speziell geht es da um die Übergabe eines Pointers auf ein Charakter Array. Um es zu konkretisieren habe ich probleme mit der Funktion setBitamp.
Das ist der Code den ich soweit schon entwickelt habe, mit dem ich das Display auch ansprechen kann bzw. ein paar Funktion auf dem Display und der DLL schon ausführen kann:
Code: Alles auswählen
from ctypes import WinDLL, byref,c_int,c_char
class LcdHandler(object):
def __init__(self,devNum):
self.__lcd = WinDLL("luise.dll")
self.__devNum = devNum
# convert the returncode into an string
def _checkReturnCode(self,rc):
if (rc == 0):
return "ok"
elif (rc == 1):
return "can't open USB-Device"
elif (rc == 2):
return "USB write error"
elif (rc == 3):
return "USB read error"
elif (rc == 4):
return "file doesn't exist"
elif (rc == 5):
return "faulty file"
elif (rc == 5):
return "out of range"
else:
return "Unknown Display RC"
# Get Version of the used luise.dll
def getDll(self):
return self.__lcd.GetDllVersion()
# Open LCD Device
def openDevice(self):
return self._checkReturnCode(self.__lcd.LUI_OpenDevice(self.__devNum))
# Close LCD Device
def closeDevice(self):
return _checkReturnCode(self.__lcd.LUI_CloseDevice(self.__devNum))
# Configure LCD Mode
def lcdMode(self,gfxMode=0,gfxInvert=0,screenRotation=0,ioRefresh=2):
return _checkReturnCode(self.__lcd.LUI_LCDmode(self.__devNum,gfxMode,gfxInvert,screenRotation,ioRefresh))
# Set Text on LCD
def setText(self,screenPosX,screenPosY,textFieldWidth,textFieldHight,transparency,fontFileName,fontWidthSpace,fontHightSpace,textdata):
return _checkReturnCode(self.__lcd.LUI_Text(self.__devNum,screenPosX,screenPosY,textFieldWidth,textFieldHight,transparency,fontFileName,fontWidthSpace,fontHightSpace,textdata))
# TODO: Check how to handle pointer to charater array in python
# Load Bitmap
def setBitmap(self,screenNr,screenPosX,screenPosY,bmpOffsetX,bmpOffsetY,bmpWidth,bmpHight,bmpDataWidth,bmpDataHight,bmpData):
return _checkReturnCode(self.__lcd.LUI_Bitmap(self.__devNum,screenNr,screenPosX,screenPosY,bmpOffsetX,bmpOffsetY,bmpWidth,bmpHight,bmpDataWidth,bmpDataHight,bmpData))
# Load Bitmap from File
def setBitmapFile(self,screenNr,screenPosX,screenPosY,bmpOffsetX,bmpOffsetY,bmpWidth,bmpHight,bmpFile):
return _checkReturnCode(self.__lcd.LUI_BMPfile(self.__devNum,screenNr,screenPosX,screenPosY,bmpOffsetX,bmpOffsetY,bmpWidth,bmpHight,bmpFile))
# Set the state of a single Pixel
def setPixel(self,screenNr,screenPosX,screenPoxY,state):
return _checkReturnCode(self.__lcd.LUI_SetPixel(self.__devNum,screenNr,screenPosX,screenPoxY,state))
# Get the state of a single Pixel
def getPixel(self,screenNr,screenPosX,screenPoxY,state):
state = c_char()
return _checkReturnCode(self.__lcd.LUI_GetPixel(self.__devNum,screenNr,screenPosX,screenPoxY,byref(state))), ord(state.value)
# Turn Display on or off
def displayOnOff(self,value):
return _checkReturnCode(self.__lcd.LUI_DispOnOff(self.__devNum,value))
# Turn Displaylight on or off
def ccflOnOff(self,value):
return _checkReturnCode(self.__lcd.LUI_CCFL(self.__devNum,value))
# Get the Contrast Value of the Display
def getContrast(self):
contrast = c_char()
return _checkReturnCode(self.__lcd.LUI_GetContrast(self.__devNum,byref(contrast))), ord(contrast.value)
# Set the Contrast Value of the Display
def setContrast(self,value):
return _checkReturnCode(self.__lcd.LUI_SetContrast(self.__devNum,value))
# Get the Data of the Input Ports (LUI v1 only)
def getInport(self):
portData = c_char()
return _checkReturnCode(self.__lcd.LUI_InPort(self.__devNum,byref(portData))), ord(portData)
# Set the Data of the Output Ports
def setOutport(self,portData):
return _checkReturnCode(self.__lcd.LUI_OutPort(self.__devNum,portData))
# Get the Serial of the Display Device
def getSerial(self):
serial = c_int()
return _checkReturnCode(self.__lcd.LUI_GetSerial(self.__devNum,byref(serial))), serial
# Set the Screen Refresh Control
def setScreenRefresh(self,gfxScreen0,gfxScreen1,txtScreen):
return _checkReturnCode(self.__lcd.LUI_ScreenRefreshControl(self.__devNum,gfxScreen0,gfxScreen1,txtScreen))
# Get the state of the TouchScreen
def getTS(self):
tsDataType = c_int * 3
tsData = tsDataType()
return _checkReturnCode(self.__lcd.LUI_TouchScreen(self.__devNum,byref(tsData))), tsData
Ich hoffe ihr könnt mir ein paar Tips geben.
Danke & Gruß
Kornelis
EDIT by Gerold: Code-Tag geändert