diff options
Diffstat (limited to 'include/in_stream.h')
-rw-r--r-- | include/in_stream.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/include/in_stream.h b/include/in_stream.h new file mode 100644 index 0000000000..7bf8821394 --- /dev/null +++ b/include/in_stream.h @@ -0,0 +1,54 @@ +/* Copyright (c) 2014 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_IN_STREAM_H +#define INCLUDE_IN_STREAM_H + +#include <stddef.h> +#include <stdint.h> + +struct in_stream; + +struct in_stream_ops { + /* + * Read at most count characters from the input stream into the user + * buffer provided. Return the number of characters actually read + * into the buffer. + */ + size_t (*read)(struct in_stream const *stream, + uint8_t *buffer, + size_t count); +}; + +struct in_stream { + /* + * Ready will be called by the stream every time new characters are + * added to the stream. This may be called from an interrupt context + * so work done by the ready callback should be minimal. Likely this + * callback will be used to call task_wake, or some similar signaling + * mechanism. + * + * This callback is part of the user configuration of a stream, and not + * a stream manipulation function (in_stream_ops). That means that + * each stream can be configured with its own ready callback. + * + * If no callback functionality is required ready can be specified as + * NULL. + */ + void (*ready)(struct in_stream const *stream); + + struct in_stream_ops const *ops; +}; + +/* + * Helper functions that call the associated stream operation and pass it the + * given stream. These help prevent mistakes where one stream is passed to + * another stream's functions. + */ +size_t in_stream_read(struct in_stream const *stream, + uint8_t *buffer, + size_t count); +void in_stream_ready(struct in_stream const *stream); + +#endif /* INCLUDE_IN_STREAM_H */ |