summaryrefslogtreecommitdiff
path: root/components/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'components/drivers')
-rw-r--r--components/drivers/cputime/cputimer.c5
-rw-r--r--components/drivers/include/rtdevice.h4
-rw-r--r--components/drivers/serial/serial_v2.c4
-rw-r--r--components/drivers/spi/spi_core.c8
-rw-r--r--components/drivers/tty/pty.c9
-rw-r--r--components/drivers/tty/tty.c6
6 files changed, 28 insertions, 8 deletions
diff --git a/components/drivers/cputime/cputimer.c b/components/drivers/cputime/cputimer.c
index 27e64a1354..12be40356e 100644
--- a/components/drivers/cputime/cputimer.c
+++ b/components/drivers/cputime/cputimer.c
@@ -337,6 +337,8 @@ rt_err_t rt_cputime_sleep(rt_uint64_t tick)
/* current context checking */
RT_DEBUG_SCHEDULER_AVAILABLE(RT_TRUE);
+ rt_cputimer_init(&cputimer, "cputime_sleep", _cputime_sleep_timeout, thread, 0, RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER);
+
/* disable interrupt */
level = rt_hw_interrupt_disable();
@@ -349,7 +351,6 @@ rt_err_t rt_cputime_sleep(rt_uint64_t tick)
/* reset the timeout of thread timer and start it */
if (err == RT_EOK)
{
- rt_cputimer_init(&cputimer, "cputime_sleep", _cputime_sleep_timeout, thread, 0, RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER);
rt_cputimer_control(&cputimer, RT_TIMER_CTRL_SET_TIME, &tick);
rt_cputimer_start(&cputimer);
@@ -359,7 +360,6 @@ rt_err_t rt_cputime_sleep(rt_uint64_t tick)
thread->error = -RT_EINTR;
rt_schedule();
- rt_cputimer_detach(&cputimer);
if (thread->error == -RT_ETIMEOUT)
thread->error = RT_EOK;
}
@@ -368,6 +368,7 @@ rt_err_t rt_cputime_sleep(rt_uint64_t tick)
rt_hw_interrupt_enable(level);
}
+ rt_cputimer_detach(&cputimer);
return err;
}
diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h
index 97acc06e0b..5b1530dbc6 100644
--- a/components/drivers/include/rtdevice.h
+++ b/components/drivers/include/rtdevice.h
@@ -164,6 +164,10 @@ extern "C" {
#include "drivers/rt_dev_bus.h"
#endif
+#ifdef RT_USING_LCD
+#include "drivers/lcd.h"
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/components/drivers/serial/serial_v2.c b/components/drivers/serial/serial_v2.c
index 9e809048bd..c88df7aabe 100644
--- a/components/drivers/serial/serial_v2.c
+++ b/components/drivers/serial/serial_v2.c
@@ -296,7 +296,7 @@ static rt_ssize_t rt_serial_update_write_index(struct rt_ringbuffer *rb,
* @param size Receive data buffer length.
* @return Return the final length of data received.
*/
-rt_size_t _serial_poll_rx(struct rt_device *dev,
+rt_ssize_t _serial_poll_rx(struct rt_device *dev,
rt_off_t pos,
void *buffer,
rt_size_t size)
@@ -343,7 +343,7 @@ rt_size_t _serial_poll_rx(struct rt_device *dev,
* @param size Transmit data buffer length.
* @return Return the final length of data received.
*/
-rt_size_t _serial_poll_tx(struct rt_device *dev,
+rt_ssize_t _serial_poll_tx(struct rt_device *dev,
rt_off_t pos,
const void *buffer,
rt_size_t size)
diff --git a/components/drivers/spi/spi_core.c b/components/drivers/spi/spi_core.c
index 63b50f265a..fca542d9bb 100644
--- a/components/drivers/spi/spi_core.c
+++ b/components/drivers/spi/spi_core.c
@@ -95,6 +95,14 @@ rt_err_t rt_spi_configure(struct rt_spi_device *device,
device->config.mode = cfg->mode & RT_SPI_MODE_MASK ;
device->config.max_hz = cfg->max_hz ;
+ if (device->cs_pin != PIN_NONE)
+ {
+ if (device->config.mode & RT_SPI_CS_HIGH)
+ rt_pin_write(device->cs_pin, PIN_LOW);
+ else
+ rt_pin_write(device->cs_pin, PIN_HIGH);
+ }
+
if (device->bus != RT_NULL)
{
result = rt_mutex_take(&(device->bus->lock), RT_WAITING_FOREVER);
diff --git a/components/drivers/tty/pty.c b/components/drivers/tty/pty.c
index 46a241a715..64e3a41df1 100644
--- a/components/drivers/tty/pty.c
+++ b/components/drivers/tty/pty.c
@@ -211,6 +211,12 @@ static int ptmx_open(struct dfs_fd *fd)
ret = ld->ops->open(fd);
}
+ rt_device_t device = (rt_device_t)fd->vnode->data;
+ if(fd->vnode->ref_count == 1)
+ {
+ ret = rt_device_open(device, fd->flags);
+ }
+
return ret;
}
#ifdef RT_USING_DEVICE_OPS
@@ -286,7 +292,8 @@ static int pts_register(struct tty_struct *ptm_drv, struct tty_struct *pts_drv,
extern struct termios tty_std_termios;
pts_drv->init_termios = tty_std_termios;
pts_drv->init_termios.c_cflag = B38400 | CS8 | CREAD;
- pts_drv->init_termios.c_lflag |= ICANON;
+ pts_drv->init_termios.c_lflag |= ECHO | ICANON;
+ pts_drv->init_termios.c_oflag |= ONLCR;
pts_drv->init_termios.__c_ispeed = 38400;
pts_drv->init_termios.__c_ospeed = 38400;
diff --git a/components/drivers/tty/tty.c b/components/drivers/tty/tty.c
index 2a9380f55a..933d5f028b 100644
--- a/components/drivers/tty/tty.c
+++ b/components/drivers/tty/tty.c
@@ -200,7 +200,7 @@ int __tty_check_change(struct tty_struct *tty, int sig)
if (!tty_pgrp)
{
- LOG_D(tty, "sig=%d, tty->pgrp == -1!\n", sig);
+ LOG_D("sig=%d, tty->pgrp == -1!\n", sig);
}
return ret;
}
@@ -275,7 +275,7 @@ static int tiocsctty(struct tty_struct *tty, int arg)
if (current->leader &&
(current->session == tty->session))
{
- return 0;
+ return 0;
}
/*
@@ -284,7 +284,7 @@ static int tiocsctty(struct tty_struct *tty, int arg)
*/
if (!current->leader || current->tty)
{
- return -EPERM;
+ return -EPERM;
}
if (tty->session > 0)