Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
2605df33
Commit
2605df33
authored
Aug 09, 2014
by
Damien George
Browse files
stmhal, pin: Save 140 bytes ROM by simplifying pin_print function.
parent
04019e36
Changes
1
Hide whitespace changes
Inline
Side-by-side
stmhal/pin.c
View file @
2605df33
...
...
@@ -189,41 +189,58 @@ const pin_obj_t *pin_find(mp_obj_t user_obj) {
STATIC
void
pin_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
pin_obj_t
*
self
=
self_in
;
// Need to query mode, pull, af
// pin name
print
(
env
,
"Pin(Pin.cpu.%s, mode=Pin."
,
qstr_str
(
self
->
name
));
print
(
env
,
"Pin(Pin.cpu.%s"
,
qstr_str
(
self
->
name
));
uint32_t
mode
=
pin_get_mode
(
self
);
if
(
mode
==
GPIO_MODE_ANALOG
)
{
print
(
env
,
", mode=Pin.ANALOG)"
,
qstr_str
(
self
->
name
));
// analog
print
(
env
,
"ANALOG)"
);
}
else
{
const
char
*
pull_str
=
""
;
uint32_t
pull
=
pin_get_pull
(
self
);
if
(
pull
==
GPIO_PULLUP
)
{
pull_str
=
", pull=Pin.PULL_UP"
;
}
else
if
(
pull
==
GPIO_PULLDOWN
)
{
pull_str
=
", pull=Pin.PULL_DOWN"
;
}
// IO mode
bool
af
=
false
;
qstr
mode_qst
;
if
(
mode
==
GPIO_MODE_INPUT
)
{
print
(
env
,
", mode=Pin.IN%s)"
,
pull_str
);
}
else
if
(
mode
==
GPIO_MODE_OUTPUT_PP
||
mode
==
GPIO_MODE_OUTPUT_OD
)
{
if
(
mode
==
GPIO_MODE_OUTPUT_PP
)
{
print
(
env
,
", mode=Pin.OUT_PP%s)"
,
pull_str
);
}
else
{
print
(
env
,
", mode=Pin.OUT_OD%s)"
,
pull_str
);
}
mode_qst
=
MP_QSTR_IN
;
}
else
if
(
mode
==
GPIO_MODE_OUTPUT_PP
)
{
mode_qst
=
MP_QSTR_OUT_PP
;
}
else
if
(
mode
==
GPIO_MODE_OUTPUT_OD
)
{
mode_qst
=
MP_QSTR_OUT_OD
;
}
else
{
af
=
true
;
if
(
mode
==
GPIO_MODE_AF_PP
)
{
print
(
env
,
", mode=Pin.
AF_PP
"
)
;
mode_qst
=
MP_QSTR_
AF_PP
;
}
else
{
print
(
env
,
", mode=Pin.
AF_OD
"
)
;
mode_qst
=
MP_QSTR_
AF_OD
;
}
}
print
(
env
,
qstr_str
(
mode_qst
));
// safe because mode_qst has no formating chars
// pull mode
qstr
pull_qst
=
MP_QSTR_NULL
;
uint32_t
pull
=
pin_get_pull
(
self
);
if
(
pull
==
GPIO_PULLUP
)
{
pull_qst
=
MP_QSTR_PULL_UP
;
}
else
if
(
pull
==
GPIO_PULLDOWN
)
{
pull_qst
=
MP_QSTR_PULL_DOWN
;
}
if
(
pull_qst
!=
MP_QSTR_NULL
)
{
print
(
env
,
", pull=Pin.%s"
,
qstr_str
(
pull_qst
));
}
// AF mode
if
(
af
)
{
mp_uint_t
af_idx
=
pin_get_af
(
self
);
const
pin_af_obj_t
*
af
=
pin_find_af_by_index
(
self
,
af_idx
);
if
(
af
==
NULL
)
{
print
(
env
,
", af=%d
%s
)"
,
af_idx
,
pull_str
);
const
pin_af_obj_t
*
af
_obj
=
pin_find_af_by_index
(
self
,
af_idx
);
if
(
af
_obj
==
NULL
)
{
print
(
env
,
", af=%d)"
,
af_idx
);
}
else
{
print
(
env
,
", af=Pin.%s)"
,
qstr_str
(
af
->
name
)
,
pull_str
);
print
(
env
,
", af=Pin.%s)"
,
qstr_str
(
af
_obj
->
name
));
}
}
else
{
print
(
env
,
")"
);
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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