avr-fw-modules/core/src/rb2_loop_rx.c

31 lines
677 B
C
Executable File

#include <rb2/regbus.h>
void rb2_loop_rx()
{
list_t *i;
cpustate_t state;
spinlock_lock_irq( &(&__rb2_instance)->links.lock, &state );
for_each_list_entry(i,&((&__rb2_instance)->links.list)){
RB2_LINK *link = list_entry(i,RB2_LINK,list);
spinlock_release_irq( &(&__rb2_instance)->links.lock, &state );
if (link->receive)
{
rb2_telegram_buffer_t *telegram = link->receive( link );
while (telegram){
telegram->link = link;
rb2_route_listed( telegram );
telegram = link->receive( link );
};
};
spinlock_lock_irq( &(&__rb2_instance)->links.lock, &state );
};
spinlock_release_irq( &(&__rb2_instance)->links.lock, &state );
};