Seite 1 von 1

SWIG Problem mit uint8

Verfasst: Freitag 4. Dezember 2009, 09:16
von mantus
Hi

also ich hab irgendwo ein Headerfile da steht

Code: Alles auswählen

typedef unsigned char       uint8;
und ein C-File in der folgender prototyp steht

Code: Alles auswählen

ReturnType CANInit (uint8 CANCC, CANBaudRateType BaudRate, uint16 MaxNrIds, uint8 MaxNrOfFilters, uint16 GlobalRxTxQueueSize)
das Ganze wurde dann mit Swig gewrapped
jedesmal wenn ich jetzt folgenden Python Call mache

Code: Alles auswählen

re = CANInit (0, BR_1000_KBIT, 0xFFFF, 10, 0xFFFF)
bekomme ich folgenden Error
TypeError: in method 'CANInit', argument 1 of type 'uint8'

Verfasst: Freitag 4. Dezember 2009, 09:31
von CM
Hallo und willkommen im Forum,

hilft ein entsprechender Typemap?

HTH
Christian

Verfasst: Freitag 4. Dezember 2009, 09:37
von mantus
danke das PRoblem hab ich gelöst ;) hatte die typemaps falsch ...danke.
sehr schnelle hilfe vielen dank.

aber jetzt hab ich das nächste Problem

ich habe eine Funktion in C die erwartet sich einen uint8 buffer

also
function(uint8 const *, length)

wie baue ich mir so ein konstrukt?
habe es jetzt wie folgt versucht:

im interface file hab ich

Code: Alles auswählen

%array_class(uint8, uint8Array);
im Python code steht dann

Code: Alles auswählen

msg = EB_tresos_TAL.uint8Array(2)
msg[0] = 0xAA
msg[1] = 0xBB

function(msg, 2)
da bekomme ich immer
TypeError: in method 'function', argument 1 of type 'uint8 const *'

ich find irgendwie nichts wie man in SWIG mit solchen puffern richtig umgeht, dabei müsste das ein doch recht häuffiger anwendungsfall sein oder?

Verfasst: Freitag 4. Dezember 2009, 09:51
von CM
Fange an zu raten, weil ich das gerade nicht probieren kann. Aber

Code: Alles auswählen

%typemap(in) (uint8 *str) {
    $1 = PyString_AsString($input);
};

void function(uint8 *str, int value);
vielleicht so in etwa?