Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
c8c44a4c
Commit
c8c44a4c
authored
Jul 30, 2014
by
Damien George
Browse files
py: Add ioctl method to stream protocol; add initial modselect.
parent
81057369
Changes
3
Hide whitespace changes
Inline
Side-by-side
extmod/modselect.c
0 → 100644
View file @
c8c44a4c
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2014 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include
<assert.h>
#include
<string.h>
#include
<stdint.h>
#include
"mpconfig.h"
#include
"misc.h"
#include
"nlr.h"
#include
"qstr.h"
#include
"obj.h"
#include
"runtime.h"
#include
"objtuple.h"
#include
"binary.h"
#if MICROPY_PY_SELECT
/// \module select - Provides select function to wait for events on a stream
///
/// This module provides the select function.
/// \function select(rlist, wlist, xlist[, timeout])
mp_obj_t
select_select
(
uint
n_args
,
const
mp_obj_t
*
args
)
{
return
mp_obj_new_bytes
((
void
*
)
mp_obj_int_get
(
ptr
),
mp_obj_int_get
(
size
));
}
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN
(
select_select_obj
,
3
,
4
,
select_select
);
STATIC
const
mp_map_elem_t
mp_module_select_globals_table
[]
=
{
{
MP_OBJ_NEW_QSTR
(
MP_QSTR___name__
),
MP_OBJ_NEW_QSTR
(
MP_QSTR_select
)
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_select
),
(
mp_obj_t
)
&
select_select_obj
},
};
STATIC
const
mp_obj_dict_t
mp_module_select_globals
=
{
.
base
=
{
&
mp_type_dict
},
.
map
=
{
.
all_keys_are_qstrs
=
1
,
.
table_is_fixed_array
=
1
,
.
used
=
MP_ARRAY_SIZE
(
mp_module_select_globals_table
),
.
alloc
=
MP_ARRAY_SIZE
(
mp_module_select_globals_table
),
.
table
=
(
mp_map_elem_t
*
)
mp_module_select_globals_table
,
},
};
const
mp_obj_module_t
mp_module_select
=
{
.
base
=
{
&
mp_type_module
},
.
name
=
MP_QSTR_select
,
.
globals
=
(
mp_obj_dict_t
*
)
&
mp_module_select_globals
,
};
#endif // MICROPY_PY_SELECT
py/mpconfig.h
View file @
c8c44a4c
...
...
@@ -390,6 +390,10 @@ typedef double mp_float_t;
#define MICROPY_PY_ZLIBD (0)
#endif
#ifndef MICROPY_PY_SELECT
#define MICROPY_PY_SELECT (0)
#endif
/*****************************************************************************/
/* Hooks for a port to add builtins */
...
...
py/obj.h
View file @
c8c44a4c
...
...
@@ -230,12 +230,14 @@ void mp_get_buffer_raise(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flag
// Stream protocol
#define MP_STREAM_ERROR (-1)
#define MP_STREAM_FLUSH (1)
#define MP_STREAM_POLL (2)
typedef
struct
_mp_stream_p_t
{
// On error, functions should return MP_STREAM_ERROR and fill in *errcode (values
// are implementation-dependent, but will be exposed to user, e.g. via exception).
mp_uint_t
(
*
read
)(
mp_obj_t
obj
,
void
*
buf
,
mp_uint_t
size
,
int
*
errcode
);
mp_uint_t
(
*
write
)(
mp_obj_t
obj
,
const
void
*
buf
,
mp_uint_t
size
,
int
*
errcode
);
// add seek() ?
mp_uint_t
(
*
ioctl
(
mp_obj_t
obj
,
mp_uint_t
request
,
int
*
errcode
,
...);
mp_uint_t
is_text
:
1
;
// default is bytes, set this for text stream
}
mp_stream_p_t
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment