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
f48cf671
Commit
f48cf671
authored
Oct 21, 2013
by
Damien
Browse files
Implement crude but working REPL for board.
parent
cbb8868f
Changes
3
Hide whitespace changes
Inline
Side-by-side
stm/main.c
View file @
f48cf671
...
...
@@ -184,32 +184,38 @@ static void board_info() {
}
char
*
readline
(
const
char
*
prompt
)
{
printf
(
"a
\n
"
);
led_state
(
PYB_LED_R1
,
1
);
printf
(
"b
\n
"
);
vstr_t
vstr
;
vstr_init
(
&
vstr
);
usb_vcp_send_str
(
prompt
);
for
(;;)
{
printf
(
"c
\n
"
);
led_state
(
PYB_LED_R2
,
1
);
//extern int rx_buf_in;
//extern int rx_buf_out;
while
(
usb_vcp_rx_any
()
==
0
)
{
//printf("nope %x %x\n", rx_buf_in, rx_buf_out);
sys_tick_delay_ms
(
10
);
}
char
c
=
usb_vcp_rx_get
();
led_state
(
PYB_LED_R2
,
0
);
usb_vcp_send_strn
(
&
c
,
1
);
led_state
(
PYB_LED_G1
,
1
);
if
(
c
==
4
&&
vstr_len
(
&
vstr
)
==
0
)
{
return
NULL
;
}
else
if
(
c
==
'\r'
)
{
usb_vcp_send_str
(
"
\r\n
"
);
return
vstr_str
(
&
vstr
);
}
else
if
(
c
==
127
)
{
if
(
vstr_len
(
&
vstr
)
>
0
)
{
vstr_cut_tail
(
&
vstr
,
1
);
usb_vcp_send_str
(
"
\b
\b
"
);
}
}
else
if
(
32
<=
c
&&
c
<=
126
)
{
vstr_add_char
(
&
vstr
,
c
);
usb_vcp_send_strn
(
&
c
,
1
);
}
sys_tick_delay_ms
(
100
);
led_state
(
PYB_LED_G1
,
0
);
}
return
NULL
;
}
extern
char
rx_buf
[];
extern
int
rx_buf_out
;
void
do_repl
()
{
int
i
=
0
;
for
(;;)
{
usb_vcp_send_str
(
"Micro Python
\r\n
"
);
printf
(
"%d %d %c
\n
"
,
i
++
,
usb_vcp_rx_any
(),
rx_buf
[
rx_buf_out
]);
sys_tick_delay_ms
(
1000
);
}
for
(;;)
{
char
*
line
=
readline
(
">>> "
);
...
...
@@ -282,6 +288,11 @@ int main() {
qstr_init
();
rt_init
();
// add some functions to the python namespace
rt_store_name
(
qstr_from_str_static
(
"pyb_delay"
),
rt_make_function_1
(
pyb_delay
));
rt_store_name
(
qstr_from_str_static
(
"pyb_led"
),
rt_make_function_1
(
pyb_led
));
rt_store_name
(
qstr_from_str_static
(
"pyb_sw"
),
rt_make_function_0
(
pyb_sw
));
// print a message
printf
(
" micro py board
\n
"
);
...
...
@@ -478,11 +489,6 @@ int main() {
}
else
{
// execute it!
// add some functions to the python namespace
rt_store_name
(
qstr_from_str_static
(
"pyb_delay"
),
rt_make_function_1
(
pyb_delay
));
rt_store_name
(
qstr_from_str_static
(
"pyb_led"
),
rt_make_function_1
(
pyb_led
));
rt_store_name
(
qstr_from_str_static
(
"pyb_sw"
),
rt_make_function_0
(
pyb_sw
));
py_obj_t
module_fun
=
rt_make_function_from_id
(
1
);
// flash once
...
...
stm/printf.c
View file @
f48cf671
...
...
@@ -209,12 +209,12 @@ int pfenv_printf(const pfenv_t *pfenv, const char *fmt, va_list args) {
}
void
lcd_print_strn
(
const
char
*
str
,
unsigned
int
len
);
void
usb_vcp_send
(
const
char
*
str
,
int
len
);
void
usb_vcp_send
_strn
(
const
char
*
str
,
int
len
);
void
stdout_print_strn
(
void
*
data
,
const
char
*
str
,
unsigned
int
len
)
{
// send stdout to LCD and USB CDC VCP
lcd_print_strn
(
str
,
len
);
//
usb_vcp_send(str, len);
usb_vcp_send
_strn
(
str
,
len
);
}
static
const
pfenv_t
pfenv_stdout
=
{
0
,
stdout_print_strn
};
...
...
stm/usb.c
View file @
f48cf671
...
...
@@ -26,15 +26,17 @@ void usb_init() {
}
void
usb_vcp_receive
(
const
char
*
buf
,
uint32_t
len
)
{
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
rx_buf
[
rx_buf_in
++
]
=
buf
[
i
];
if
(
rx_buf_in
>=
sizeof
(
rx_buf
))
{
rx_buf_in
=
0
;
}
if
(
rx_buf_in
==
rx_buf_out
)
{
rx_buf_out
=
rx_buf_in
+
1
;
if
(
rx_buf_out
>=
sizeof
(
rx_buf
))
{
rx_buf_out
=
0
;
if
(
is_enabled
)
{
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
rx_buf
[
rx_buf_in
++
]
=
buf
[
i
];
if
(
rx_buf_in
>=
sizeof
(
rx_buf
))
{
rx_buf_in
=
0
;
}
if
(
rx_buf_in
==
rx_buf_out
)
{
rx_buf_out
=
rx_buf_in
+
1
;
if
(
rx_buf_out
>=
sizeof
(
rx_buf
))
{
rx_buf_out
=
0
;
}
}
}
}
...
...
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