Statistics
| Branch: | Tag: | Revision:

amiro-os / core / inc / aos_iostream.h @ f39a7138

History | View | Annotate | Download (3.993 KB)

1 ba516b61 Thomas Schöpping
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2018  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14

15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19 53710ca3 Marc Rothmann
/**
20
 * @file    aos_iostream.h
21
 * @brief   Stream and channel macros and structures.
22
 *
23
 * @addtogroup aos_stream
24
 * @{
25
 */
26
27 ba516b61 Thomas Schöpping
#ifndef _AMIROOS_IOSTREAM_H_
28
#define _AMIROOS_IOSTREAM_H_
29
30
#include <hal.h>
31
#include <aos_types.h>
32
#include <stdarg.h>
33
34
35
36
/**
37
 * @brief   Channel flag to indicate whether the channel is attached to a stream.
38
 */
39
#define AOS_IOCHANNEL_ATTACHED                  (1 << 0)
40
41
/**
42 dd8738ea Thomas Schöpping
 * @brief   Channel flag to indicate whether the channel is set as input.
43
 */
44
#define AOS_IOCHANNEL_INPUT_ENABLE              (1 << 1)
45
46
/**
47 ba516b61 Thomas Schöpping
 * @brief   Channel flag to indicate whether the channel is set as output.
48
 */
49 dd8738ea Thomas Schöpping
#define AOS_IOCHANNEL_OUTPUT_ENABLE             (1 << 2)
50 ba516b61 Thomas Schöpping
51
/*
52
 * forward definitions
53
 */
54
typedef struct aos_iochannel AosIOChannel;
55
typedef struct aos_ostream AosIOStream;
56
57
/**
58
 * @brief   AosI=Channel specific methods.
59
 */
60
#define _aos_iochannel_methods                                              \
61
  _base_asynchronous_channel_methods
62
63
/**
64
 * @brief   AosIOChannel specific data.
65
 */
66
#define _aos_iochannel_data                                                 \
67
  /* pointer to a BaseAsynchronousChannel object */                         \
68
  BaseAsynchronousChannel* asyncchannel;                                    \
69
  /* pointer to the next channel in a AosIOStream */                        \
70
  AosIOChannel* next;                                                       \
71
  /* flags related to the channel */                                        \
72
  uint8_t flags;
73
74
/**
75
 * @extends BaseAsynchronousChannelVMT
76
 *
77
 * @brief   AosIOChannel virtual methods table.
78
 */
79
struct AosIOChannelVMT {
80
  _aos_iochannel_methods
81
};
82
83
/**
84
 * @extends BaseAsynchronousChannel
85
 *
86
 * @brief   I/O Channel class.
87
 * @details This class implements an asynchronous I/O channel.
88
 */
89
struct aos_iochannel {
90
  /** @brief Virtual Methods Table. */
91
  const struct AosIOChannelVMT* vmt;
92
  _aos_iochannel_data
93
};
94
95
/**
96
 * @brief   AosIOStream methods.
97
 */
98
#define _aos_iostream_methods                                               \
99
  _base_sequential_stream_methods
100
101
/**
102
 * @brief   AosIOStream data.
103
 */
104
#define _aos_iostream_data                                                  \
105
  /* Pointer to the first channel in a list. */                             \
106
  AosIOChannel* channel;
107
108
/**
109
 * @extends BaseSequentialStream
110
 *
111
 * @brief   AosIOStream virtual methods table.
112
 */
113
struct AosIOStreamVMT {
114
  _aos_iostream_methods
115
};
116
117
/**
118
 * @extends BaseSequentialStream
119
 *
120
 * @brief   I/O Stream class.
121
 * @details This class implements an base sequential stream.
122
 * @todo    So far only output but no input is supported.
123
 */
124
struct aos_ostream {
125
  const struct AosIOStreamVMT* vmt;
126
  _aos_iostream_data
127
};
128
129
#ifdef __cplusplus
130
extern "C" {
131
#endif
132
  void aosIOStreamInit(AosIOStream* stream);
133
  void aosIOChannelInit(AosIOChannel* channel, BaseAsynchronousChannel* asyncchannel);
134
  void aosIOStreamAddChannel(AosIOStream* stream, AosIOChannel* channel);
135
  aos_status_t aosIOStreamRemoveChannel(AosIOStream* stream, AosIOChannel* channel);
136 dd8738ea Thomas Schöpping
  void aosIOChannelInputEnable(AosIOChannel* channel);
137
  void aosIOChannelInputDisable(AosIOChannel* channel);
138 ba516b61 Thomas Schöpping
  void aosIOChannelOutputEnable(AosIOChannel* channel);
139
  void aosIOChannelOutputDisable(AosIOChannel* channel);
140
#ifdef __cplusplus
141
}
142
#endif
143
144
#endif /* _AMIROOS_IOSTREAM_H_ */
145 53710ca3 Marc Rothmann
146
/** @} */