diff options
Diffstat (limited to 'include/stream_adaptor.h')
-rw-r--r-- | include/stream_adaptor.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/include/stream_adaptor.h b/include/stream_adaptor.h new file mode 100644 index 0000000000..916ab6e78d --- /dev/null +++ b/include/stream_adaptor.h @@ -0,0 +1,80 @@ +/* Copyright (c) 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef INCLUDE_STREAM_ADAPTOR_H +#define INCLUDE_STREAM_ADAPTOR_H + +/* STM32 USART driver for Chrome EC */ + +#include "common.h" +#include "in_stream.h" +#include "out_stream.h" +#include "consumer.h" +#include "producer.h" + +/* + * +..........+ +..........+------+...........+ + * . .<------------->. | | . + * . Producer . +---------+ . Consumer | ISFP | In Stream . + * . .->| Queue |->. | | . + * +..........+ +---------+ +..........+------+...........+ + */ + +struct in_stream_from_producer { + struct consumer consumer; + struct in_stream in; +}; + +/* + * + */ +extern struct in_stream_ops const in_stream_from_producer_in_stream_ops; +extern struct consumer_ops const in_stream_from_producer_consumer_ops; + +#define IN_STREAM_FROM_PRODUCER(NAME, PRODUCER, QUEUE, READY) \ + struct in_stream_from_producer const NAME = { \ + .consumer = { \ + .producer = &PRODUCER, \ + .queue = &QUEUE, \ + .ops = &in_stream_from_producer_consumer_ops, \ + }, \ + .in = { \ + .ready = READY, \ + .ops = &in_stream_from_producer_in_stream_ops, \ + }, \ + }; + +/* + * +..........+ +..........+------+............+ + * . .<------------->. | | . + * . Consumer . +---------+ . Producer | OSFC | Out Stream . + * . .<-| Queue |<-. | | . + * +..........+ +---------+ +..........+------+............+ + */ + +struct out_stream_from_consumer { + struct producer producer; + struct out_stream out; +}; + +/* + * + */ +extern struct out_stream_ops const out_stream_from_consumer_out_stream_ops; +extern struct producer_ops const out_stream_from_consumer_producer_ops; + +#define OUT_STREAM_FROM_CONSUMER(NAME, CONSUMER, QUEUE, READY) \ + struct out_stream_from_consumer const NAME = { \ + .producer = { \ + .consumer = &CONSUMER, \ + .queue = &QUEUE, \ + .ops = &out_stream_from_consumer_producer_ops, \ + }, \ + .out = { \ + .ready = READY, \ + .ops = &out_stream_from_consumer_out_stream_ops, \ + }, \ + }; + +#endif /* INCLUDE_STREAM_ADAPTOR_H */ |