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
07e83573
Commit
07e83573
authored
Nov 23, 2016
by
Damien George
Browse files
extmod/machine_i2c: Add 'nack' argument to i2c.readinto.
parent
ced240e7
Changes
2
Hide whitespace changes
Inline
Side-by-side
extmod/machine_i2c.c
View file @
07e83573
...
...
@@ -346,8 +346,8 @@ STATIC mp_obj_t machine_i2c_stop(mp_obj_t self_in) {
}
MP_DEFINE_CONST_FUN_OBJ_1
(
machine_i2c_stop_obj
,
machine_i2c_stop
);
STATIC
mp_obj_t
machine_i2c_readinto
(
mp_obj_t
self_in
,
mp_obj_t
buf_in
)
{
mp_obj_base_t
*
self
=
(
mp_obj_base_t
*
)
MP_OBJ_TO_PTR
(
self_in
);
STATIC
mp_obj_t
machine_i2c_readinto
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
mp_obj_base_t
*
self
=
(
mp_obj_base_t
*
)
MP_OBJ_TO_PTR
(
args
[
0
]
);
mp_machine_i2c_p_t
*
i2c_p
=
(
mp_machine_i2c_p_t
*
)
self
->
type
->
protocol
;
if
(
i2c_p
->
read
==
NULL
)
{
mp_raise_msg
(
&
mp_type_OSError
,
"I2C operation not supported"
);
...
...
@@ -355,17 +355,20 @@ STATIC mp_obj_t machine_i2c_readinto(mp_obj_t self_in, mp_obj_t buf_in) {
// get the buffer to read into
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
buf_in
,
&
bufinfo
,
MP_BUFFER_WRITE
);
mp_get_buffer_raise
(
args
[
1
],
&
bufinfo
,
MP_BUFFER_WRITE
);
// work out if we want to send a nack at the end
bool
nack
=
(
n_args
==
2
)
?
true
:
mp_obj_is_true
(
args
[
2
]);
// do the read
int
ret
=
i2c_p
->
read
(
self
,
bufinfo
.
buf
,
bufinfo
.
len
);
int
ret
=
i2c_p
->
read
(
self
,
bufinfo
.
buf
,
bufinfo
.
len
,
nack
);
if
(
ret
!=
0
)
{
mp_raise_OSError
(
-
ret
);
}
return
mp_const_none
;
}
MP_DEFINE_CONST_FUN_OBJ_
2
(
machine_i2c_readinto_obj
,
machine_i2c_readinto
);
MP_DEFINE_CONST_FUN_OBJ_
VAR_BETWEEN
(
machine_i2c_readinto_obj
,
2
,
3
,
machine_i2c_readinto
);
STATIC
mp_obj_t
machine_i2c_write
(
mp_obj_t
self_in
,
mp_obj_t
buf_in
)
{
mp_obj_base_t
*
self
=
(
mp_obj_base_t
*
)
MP_OBJ_TO_PTR
(
self_in
);
...
...
@@ -579,10 +582,10 @@ int mp_machine_soft_i2c_stop(mp_obj_base_t *self_in) {
return
mp_hal_i2c_stop
(
self
);
}
int
mp_machine_soft_i2c_read
(
mp_obj_base_t
*
self_in
,
uint8_t
*
dest
,
size_t
len
)
{
int
mp_machine_soft_i2c_read
(
mp_obj_base_t
*
self_in
,
uint8_t
*
dest
,
size_t
len
,
bool
nack
)
{
machine_i2c_obj_t
*
self
=
(
machine_i2c_obj_t
*
)
self_in
;
while
(
len
--
)
{
int
ret
=
mp_hal_i2c_read_byte
(
self
,
dest
++
,
len
==
0
);
int
ret
=
mp_hal_i2c_read_byte
(
self
,
dest
++
,
nack
&&
(
len
==
0
)
)
;
if
(
ret
!=
0
)
{
return
ret
;
}
...
...
extmod/machine_i2c.h
View file @
07e83573
...
...
@@ -34,7 +34,7 @@
typedef
struct
_mp_machine_i2c_p_t
{
int
(
*
start
)(
mp_obj_base_t
*
obj
);
int
(
*
stop
)(
mp_obj_base_t
*
obj
);
int
(
*
read
)(
mp_obj_base_t
*
obj
,
uint8_t
*
dest
,
size_t
len
);
int
(
*
read
)(
mp_obj_base_t
*
obj
,
uint8_t
*
dest
,
size_t
len
,
bool
nack
);
int
(
*
write
)(
mp_obj_base_t
*
obj
,
const
uint8_t
*
src
,
size_t
len
);
int
(
*
readfrom
)(
mp_obj_base_t
*
obj
,
uint16_t
addr
,
uint8_t
*
dest
,
size_t
len
,
bool
stop
);
int
(
*
writeto
)(
mp_obj_base_t
*
obj
,
uint16_t
addr
,
const
uint8_t
*
src
,
size_t
len
,
bool
stop
);
...
...
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