|
|
@@ -29,6 +29,7 @@
|
|
|
|
|
|
static rt_device_t console_dev = NULL;
|
|
|
static struct rt_device dummy_console = { 0 };
|
|
|
+static rt_uint16_t console_open_flag;
|
|
|
|
|
|
void mp_putsn(const char *str, size_t len) {
|
|
|
if (console_dev) {
|
|
|
@@ -36,24 +37,36 @@ void mp_putsn(const char *str, size_t len) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void mp_putsn_stream(const char *str, size_t len) {
|
|
|
+ if (console_dev) {
|
|
|
+ rt_uint16_t old_flag = console_dev->open_flag;
|
|
|
+
|
|
|
+ console_dev->open_flag |= RT_DEVICE_FLAG_STREAM;
|
|
|
+ rt_device_write(console_dev, 0, str, len);
|
|
|
+ console_dev->open_flag = old_flag;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void mp_putsn_init(void) {
|
|
|
{/* register dummy console device */
|
|
|
#ifdef RT_USING_DEVICE_OPS
|
|
|
- static struct rt_device_ops _ops = {.ops = &_ops};
|
|
|
+ static struct rt_device_ops _ops = {0};
|
|
|
+ dummy_console.ops = &_ops
|
|
|
#endif
|
|
|
|
|
|
dummy_console.type = RT_Device_Class_Char;
|
|
|
|
|
|
- rt_device_register(&dummy_console, "dummy", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STREAM);
|
|
|
+ rt_device_register(&dummy_console, "dummy", RT_DEVICE_FLAG_RDWR);
|
|
|
}
|
|
|
|
|
|
/* backup the console device */
|
|
|
console_dev = rt_console_get_device();
|
|
|
+ console_open_flag = console_dev->open_flag;
|
|
|
|
|
|
/* set the new console device to dummy console */
|
|
|
rt_console_set_device(dummy_console.parent.name);
|
|
|
/* reopen the old console device for mp_putsn */
|
|
|
- rt_device_open(console_dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM);
|
|
|
+ rt_device_open(console_dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
|
|
|
}
|
|
|
|
|
|
void mp_putsn_deinit(void) {
|
|
|
@@ -61,6 +74,7 @@ void mp_putsn_deinit(void) {
|
|
|
rt_device_close(console_dev);
|
|
|
/* restore the old console device */
|
|
|
rt_console_set_device(console_dev->parent.name);
|
|
|
+ console_dev->open_flag = console_open_flag;
|
|
|
|
|
|
rt_device_unregister(&dummy_console);
|
|
|
}
|