Numworks Epsilon  1.4.1
Graphing Calculator Operating System
stream.h
Go to the documentation of this file.
1 /*
2  * This file is part of the MicroPython project, http://micropython.org/
3  *
4  * The MIT License (MIT)
5  *
6  * Copyright (c) 2013, 2014 Damien P. George
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a copy
9  * of this software and associated documentation files (the "Software"), to deal
10  * in the Software without restriction, including without limitation the rights
11  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12  * copies of the Software, and to permit persons to whom the Software is
13  * furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24  * THE SOFTWARE.
25  */
26 #ifndef MICROPY_INCLUDED_PY_STREAM_H
27 #define MICROPY_INCLUDED_PY_STREAM_H
28 
29 #include "py/obj.h"
30 #include "py/mperrno.h"
31 
32 #define MP_STREAM_ERROR ((mp_uint_t)-1)
33 
34 // Stream ioctl request codes
35 #define MP_STREAM_FLUSH (1)
36 #define MP_STREAM_SEEK (2)
37 #define MP_STREAM_POLL (3)
38 //#define MP_STREAM_CLOSE (4) // Not yet implemented
39 #define MP_STREAM_TIMEOUT (5) // Get/set timeout (single op)
40 #define MP_STREAM_GET_OPTS (6) // Get stream options
41 #define MP_STREAM_SET_OPTS (7) // Set stream options
42 #define MP_STREAM_GET_DATA_OPTS (8) // Get data/message options
43 #define MP_STREAM_SET_DATA_OPTS (9) // Set data/message options
44 
45 // These poll ioctl values are compatible with Linux
46 #define MP_STREAM_POLL_RD (0x0001)
47 #define MP_STREAM_POLL_WR (0x0004)
48 #define MP_STREAM_POLL_ERR (0x0008)
49 #define MP_STREAM_POLL_HUP (0x0010)
50 
51 // Argument structure for MP_STREAM_SEEK
53  // If whence == MP_SEEK_SET, offset should be treated as unsigned.
54  // This allows dealing with full-width stream sizes (16, 32, 64,
55  // etc. bits). For other seek types, should be treated as signed.
57  int whence;
58 };
59 
60 // seek ioctl "whence" values
61 #define MP_SEEK_SET (0)
62 #define MP_SEEK_CUR (1)
63 #define MP_SEEK_END (2)
64 
65 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_read_obj);
66 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_read1_obj);
67 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_readinto_obj);
68 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_unbuffered_readline_obj);
69 MP_DECLARE_CONST_FUN_OBJ_1(mp_stream_unbuffered_readlines_obj);
70 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_write_obj);
71 MP_DECLARE_CONST_FUN_OBJ_2(mp_stream_write1_obj);
72 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_seek_obj);
73 MP_DECLARE_CONST_FUN_OBJ_1(mp_stream_tell_obj);
74 MP_DECLARE_CONST_FUN_OBJ_1(mp_stream_flush_obj);
75 MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_ioctl_obj);
76 
77 // these are for mp_get_stream_raise and can be or'd together
78 #define MP_STREAM_OP_READ (1)
79 #define MP_STREAM_OP_WRITE (2)
80 #define MP_STREAM_OP_IOCTL (4)
81 
82 const mp_stream_p_t *mp_get_stream_raise(mp_obj_t self_in, int flags);
84 
85 // Iterator which uses mp_stream_unbuffered_readline_obj
87 
88 mp_obj_t mp_stream_write(mp_obj_t self_in, const void *buf, size_t len, byte flags);
89 
90 // C-level helper functions
91 #define MP_STREAM_RW_READ 0
92 #define MP_STREAM_RW_WRITE 2
93 #define MP_STREAM_RW_ONCE 1
94 mp_uint_t mp_stream_rw(mp_obj_t stream, void *buf, mp_uint_t size, int *errcode, byte flags);
95 #define mp_stream_write_exactly(stream, buf, size, err) mp_stream_rw(stream, (byte*)buf, size, err, MP_STREAM_RW_WRITE)
96 #define mp_stream_read_exactly(stream, buf, size, err) mp_stream_rw(stream, buf, size, err, MP_STREAM_RW_READ)
97 
98 void mp_stream_write_adaptor(void *self, const char *buf, size_t len);
99 
100 #if MICROPY_STREAMS_POSIX_API
101 // Functions with POSIX-compatible signatures
102 ssize_t mp_stream_posix_write(mp_obj_t stream, const void *buf, size_t len);
103 ssize_t mp_stream_posix_read(mp_obj_t stream, void *buf, size_t len);
104 off_t mp_stream_posix_lseek(mp_obj_t stream, off_t offset, int whence);
105 int mp_stream_posix_fsync(mp_obj_t stream);
106 #endif
107 
108 #if MICROPY_STREAMS_NON_BLOCK
109 #define mp_is_nonblocking_error(errno) ((errno) == EAGAIN || (errno) == EWOULDBLOCK)
110 #else
111 #define mp_is_nonblocking_error(errno) (0)
112 #endif
113 
114 #endif // MICROPY_INCLUDED_PY_STREAM_H
uintptr_t mp_uint_t
Definition: mpconfigport.h:74
mp_off_t offset
Definition: stream.h:56
MP_DECLARE_CONST_FUN_OBJ_2(mp_stream_write1_obj)
mp_uint_t mp_stream_rw(mp_obj_t stream, void *buf, mp_uint_t size, int *errcode, byte flags)
Definition: stream.c:55
long mp_off_t
Definition: mpconfigport.h:76
const mp_stream_p_t * mp_get_stream_raise(mp_obj_t self_in, int flags)
Definition: stream.c:95
int ssize_t
Definition: stddef.h:6
MP_DECLARE_CONST_FUN_OBJ_1(mp_stream_unbuffered_readlines_obj)
MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_read_obj)
mp_obj_t mp_stream_unbuffered_iter(mp_obj_t self)
Definition: stream.c:429
unsigned char byte
Definition: misc.h:37
void mp_stream_write_adaptor(void *self, const char *buf, size_t len)
Definition: stream.c:262
uint64_t mp_obj_t
Definition: obj.h:39
mp_obj_t mp_stream_close(mp_obj_t stream)
Definition: stream.c:108
mp_obj_t mp_stream_write(mp_obj_t self_in, const void *buf, size_t len, byte flags)
Definition: stream.c:243