#ifndef PTPIN_H
#define PTPIN_H
#include "ptpublic.h"
PT_TYPE_DEFINE(pin_wire_t)
{
void (PT_CCALL*handler)(pin_wire_t*);
pin_wire_t** prev;
pin_wire_t* next;
};
PT_INLINE void pin_wire_init(pin_wire_t* w) { w->handler = 0; w->prev = 0; }
PT_INLINE void pin_wire_term(pin_wire_t* w) {
#ifdef ASSERT
ASSERT(!w->prev);
#endif
}
#define INTERFACE_NAME pin_i
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , signal );
PT_INTERFACE_FUN0( void , reset );
PT_INTERFACE_FUNC( int , attach ,void (PT_CCALL*handler)(pin_wire_t*),pin_wire_t*);
PT_INTERFACE_FUNC( int , detach ,pin_wire_t*);
PT_INTERFACE_FUN0( int, poll );
#ifdef __cplusplus
PT_INLINE void pulse() { reset(); }
#endif
};
#undef INTERFACE_NAME
PT_INLINE void pin_i_signal(pin_i* p) { PT_VCAL0(p,signal); }
PT_INLINE void pin_i_reset(pin_i* p) { PT_VCAL0(p,reset); }
PT_INLINE void pin_i_pulse(pin_i* p) { PT_VCAL0(p,reset); }
PT_INLINE int pin_i_attach(pin_i* p,void (PT_CCALL*handler)(pin_wire_t*),pin_wire_t* w) { return PT_VCALL(p,attach,handler,w); }
PT_INLINE int pin_i_detach(pin_i* p,pin_wire_t* w) { return PT_VCALL(p,detach,w); }
PT_INLINE int pin_i_poll(pin_i* p) { return PT_VCAL0(p,poll); }
#endif