int queue_init(struct queue_t *self_p, void *buf_p, size_t size) { ASSERTN(self_p != NULL, EINVAL); ASSERTN((buf_p == NULL) || ((buf_p != NULL) && (size > 0)), EINVAL); chan_init(&self_p->base, (chan_read_fn_t)queue_read, (chan_write_fn_t)queue_write, (chan_size_fn_t)queue_size); chan_set_write_isr_cb(&self_p->base, (chan_write_fn_t)queue_write_isr); self_p->buffer.begin_p = buf_p; self_p->buffer.read_p = buf_p; self_p->buffer.write_p = buf_p; self_p->buffer.end_p = &((char*)buf_p)[size]; self_p->buffer.size = size; self_p->state = QUEUE_STATE_INITIALIZED; self_p->buf_p = NULL; self_p->size = 0; self_p->left = 0; return (0); }
static int test_filter(struct harness_t *harness_p) { struct chan_t chan; char buf[2]; BTASSERT(chan_init(&chan, chan_read_null, write_cb, chan_size_null) == 0); /* Write without filter function. */ buf[0] = 1; buf[1] = 2; BTASSERT(chan_write(&chan, &buf[0], 2) == 2); BTASSERT(memcmp(buffer, buf, 2) == 0); /* Filter out the message. */ BTASSERT(chan_set_write_filter_cb(&chan, write_filter) == 0); buf[0] = 1; buf[1] = 2; write_filter_return_value = 1; memset(buffer, -1, sizeof(buffer)); BTASSERT(chan_write(&chan, &buf[0], 2) == 2); buf[0] = -1; buf[1] = -1; BTASSERT(memcmp(buffer, buf, 2) == 0); BTASSERT(chan_set_write_filter_cb(&chan, NULL) == 0); /* Write isr without filter function. */ BTASSERT(chan_set_write_isr_cb(&chan, write_cb) == 0); buf[0] = 1; buf[1] = 2; BTASSERT(chan_write_isr(&chan, &buf[0], 2) == 2); BTASSERT(memcmp(buffer, buf, 2) == 0); /* Filter out the message. */ BTASSERT(chan_set_write_filter_isr_cb(&chan, write_filter) == 0); buf[0] = 1; buf[1] = 2; write_filter_return_value = 1; memset(buffer, -1, sizeof(buffer)); BTASSERT(chan_write_isr(&chan, &buf[0], 2) == 2); buf[0] = -1; buf[1] = -1; BTASSERT(memcmp(buffer, buf, 2) == 0); BTASSERT(chan_set_write_filter_isr_cb(&chan, NULL) == 0); return (0); }