/* * tp.c * * Created on: 30-04-2014 * Author: KJ */ #include "tdefs.h" #include "misc.h" #include "tp.h" int tp_initlog(void *arguments, void *logic) { struct tp_args *args = (struct tp_args *)arguments; struct tp_logic *log = (struct tp_logic *)logic; log->out_ptr = log_manager.nets_data + (args->io.out >> 3); log->out_bit_no = args->io.out & 0x07; log->in_ptr = log_manager.nets_data + (args->io.in >> 3); log->in_bit_no = args->io.in & 0x07; log->reset_ptr = log_manager.nets_data + (args->io.reset >> 3); log->reset_bit_no = args->io.reset & 0x07; log->t_cnt=args->params.t_delay; if(log->out_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data))) return -1; if(log->in_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data))) return -1; if(log->reset_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data))) return -1; return 0; } void tp(void *arguments, void *logic) { struct tp_args *args = (struct tp_args *)arguments; struct tp_logic *log = (struct tp_logic *)logic; if(*log->reset_ptr & (1<reset_bit_no)) { log->t_cnt=args->params.t_delay; *log->out_ptr&=~(1<out_bit_no); } else { if(*log->in_ptr & (1<in_bit_no)) { *log->out_ptr|=(1<out_bit_no); log->t_cnt=0; } else { if(log->t_cnt>=args->params.t_delay) *log->out_ptr&=~(1<out_bit_no); else { *log->out_ptr|=(1<out_bit_no); log->t_cnt+=LOOP_CYCLE_MS; } } } }