void test_stream_filter(void) { stream_t *st; long count = 0; puts("Testing even filter (0-10):"); st = stream_range(0, 10, 1); while(!stream_empty(st)) { st = stream_filter(st, stream_generic_filter_even, NULL); if(!st) break; printf("\t%p\n", (void *)stream_head(st)); CU_ASSERT((void *)stream_head(st) == (void *)count); count += 2; st = stream_tail(st); } return; }
/* Main thread */ void usb_thread (void) { for (;;) { bcond_wait(&usb_active); t_yield(); int16_t c; while ((c = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface)) > 0) stream_put(&cdc_instr, c); t_yield(); while ( ! stream_empty(&cdc_outstr)) CDC_Device_SendByte(&VirtualSerial_CDC_Interface, stream_get(&cdc_outstr)); CDC_Device_USBTask(&VirtualSerial_CDC_Interface); USB_USBTask(); } }