Swig-Objekt / comedi
Verfasst: Montag 6. Januar 2014, 18:40
Hallo,
ich wollte mal wieder was Löten und habe mir ein Velleman K8055N USB-IO-Board gekauft. Funktioniert auch, im Linux-Kernel gibt es für das Board schon fertig einen comedi-Driver. Per Swig gibt es dafür auch eine Python-Schnittstelle (comedi.py). Leider ist das Ding völlig undokumentiert, was die ganze Sache ziemlich mühsam macht. Zudem wird nur ein Bruchteil der comedi-Funktionen von meinem Board unterstützt. Aus der Datei comedi.c werde ich nicht so richtig schlau, dafür reichen meine C-Kenntnisse nicht aus.
Die Digitalen und Analoge IO-Ports kann ich mit Python ansprechen, es werden Python-Listen oder -Integers zurückgegeben, funktioniert. Bei manchen Funktionen werden allerdings nur Pointer auf C-Objekte zurückgegeben. Das sieht dann so aus:
Ausgabe:
Gibt es irgend eine einfache Möglickeit, mit Python auf diese Objekt zuzugreifen? Eigentlich will ich nur "range" abfragen.
Vielen Dank.
ich wollte mal wieder was Löten und habe mir ein Velleman K8055N USB-IO-Board gekauft. Funktioniert auch, im Linux-Kernel gibt es für das Board schon fertig einen comedi-Driver. Per Swig gibt es dafür auch eine Python-Schnittstelle (comedi.py). Leider ist das Ding völlig undokumentiert, was die ganze Sache ziemlich mühsam macht. Zudem wird nur ein Bruchteil der comedi-Funktionen von meinem Board unterstützt. Aus der Datei comedi.c werde ich nicht so richtig schlau, dafür reichen meine C-Kenntnisse nicht aus.
Die Digitalen und Analoge IO-Ports kann ich mit Python ansprechen, es werden Python-Listen oder -Integers zurückgegeben, funktioniert. Bei manchen Funktionen werden allerdings nur Pointer auf C-Objekte zurückgegeben. Das sieht dann so aus:
Code: Alles auswählen
import comedi as c
def main():
dev0 = c.comedi_open("/dev/comedi0")
print "Maxrange analog input: ", c.comedi_get_range(dev0,0,0,0)
c.comedi_close(dev0)
if __name__ == '__main__':
main()
Das C-Objekt hat folgende Struktur:Maxrange analog input: <comedi.comedi_range; proxy of <Swig Object of type 'comedi_range *' at 0x7f98f525f480> >
Code: Alles auswählen
comedi_range * comedi_get_range( comedi_t * device,
unsigned int subdevice,
unsigned int channel,
unsigned int range);
Vielen Dank.