Was ich bis jetzt habe ist in Code 4 definiert. Ich komme jetzt allerdings nicht weiter. Wie kann ich die callback Function einhängen? Sprich eine Python-methode als C-callback function einhängen. z.B. wie linke ich timer_cnfg_mode_primary_p auf timer_cnfg_mode_primary'?
Code1:
Code: Alles auswählen
typedef struct {
...;
volatile uint16_t huge *ad_prim[8];
volatile uint16_t huge *ad_sec[8];
...
unsigned short_t (*timer_cnfg_mode_primary)(unsigned short channel, unsigned char mode);
unsigned short (*timer_cnfg_input_primary)(unsigned short channel, unsigned char input);
unsigned short (*timer_cnfg_mode_secondary)(unsigned short channel, unsigned char mode);
unsigned short (*timer_cnfg_input_secondary)(unsigned short channel, unsigned char input);
...
}data_t;
Code: Alles auswählen
data_t(Structure):
pass
data_t._fields_ = [
...,
('ad_prim', POINTER(c_uint16) * 8),
('ad_sec', POINTER(c_uint16) * 8),
...,
('timer_cnfg_mode_primary', CFUNCTYPE(c_uint16, c_uint16, c_ubyte)),
('timer_cnfg_input_primary', CFUNCTYPE(c_uint16, c_uint16, c_ubyte)),
('timer_cnfg_mode_secondary', CFUNCTYPE(c_uint16,c_uint16, c_ubyte)),
('timer_cnfg_input_secondary', CFUNCTYPE(c_uint16, c_uint16, c_ubyte)),
...,
]
Code: Alles auswählen
static timer_primary[8];
static timer_primary[[8];
static const data_t data = {
...,
&timer_primary[0],
&timer_primary[1],
&timer_primary[2],
&timer_primary[3],
&timer_primary[4],
&timer_primary[5],
&timer_primary[6],
&timer_primary[7],
&timer_secondary[0],
&timer_secondary[1],
&timer_secondary[2],
&timer_secondary[3],
&timer_secondary[4],
&timer_secondary[5],
&timer_secondary[6],
&timer_secondary[7],
&timer_cnfg_mode_primary,
&timer_cnfg_input_primary,
&timer_cnfg_mode_secondary,
&timer_cnfg_input_secondary,
...
};
static unsigned short timer_cnfg_mode_primary(unsigned short channel, unsigned char mode)
{
switch(mode)
{
case MODE_INIT:
timer_primary[channel] = 0;
break;
default:
break;
}
return(0);
}
static unsigned short timer_cnfg_input_primary(unsigned short channel, unsigned char input)
{
return(0);
}
static unsigned short timer_cnfg_mode_secondary(unsigned short channel, unsigned char mode)
{
switch(mode)
{
case MODE_INIT:
timer_secondary[channel] = 0;
break;
default:
break;
}
return(0);
}
static unsigned short timer_cnfg_input_secondary(unsigned short channel, unsinged short input)
{
return(0);
}
Code: Alles auswählen
class Error(Exception):
pass
class Error_NOT_FOUND(Exception):
pass
def _error_check(result, func, arguments):
if result != 0
if result == 1:
raise Error_NOT_FOUND
else:
raise Error('%s%r returned %d' % (func, arguments, result))
....
dll.init.errcheck = _error_check
class IFXX(dll.data_t):
def __init__(self, mod_nr, type_module):
dll.data_t.__init__(self)
...
...
def timer_cnfg_mode_primary_p(channel, mode):
if mode == dll.MODE_INIT:
self.timer_primary[channel].value
return 0
def timer_cnfg_input_primary_p(channel, input):
return 0
def timer_cnfg_mode_secondary_p(channel, mode):
if mode ==dll.INIT:
self.timer_secondary[channel].value
return 0
def timer_cnfg_input_secondary_p(channel, input):
return 0