SWIG Problem mit uint8

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mantus
User
Beiträge: 17
Registriert: Freitag 4. Dezember 2009, 09:08

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'
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum,

hilft ein entsprechender Typemap?

HTH
Christian
mantus
User
Beiträge: 17
Registriert: Freitag 4. Dezember 2009, 09:08

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?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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?
Antworten