summaryrefslogtreecommitdiff
path: root/bsp/nrf5x/libraries/drivers
diff options
context:
space:
mode:
authorchenyingchun0312 <[email protected]>2020-10-27 22:42:12 +0800
committerchenyingchun0312 <[email protected]>2020-10-27 22:42:12 +0800
commitac5fb52ef709eca399dcd7dc50480eca62d2e8af (patch)
tree56b105f0b8f90db474c127b32d5acd4e30df219b /bsp/nrf5x/libraries/drivers
parent9cd38972a27a9baf5278d62431c8f6e77b9878b1 (diff)
[bsp/nrf52x] support putting characters to ble host and getting characters from
ble host via rtthread finsh console Signed-off-by: chenyingchun0312 <[email protected]>
Diffstat (limited to 'bsp/nrf5x/libraries/drivers')
-rw-r--r--bsp/nrf5x/libraries/drivers/drv_uart.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/bsp/nrf5x/libraries/drivers/drv_uart.c b/bsp/nrf5x/libraries/drivers/drv_uart.c
index 08c7148353..7f7d4ba7d6 100644
--- a/bsp/nrf5x/libraries/drivers/drv_uart.c
+++ b/bsp/nrf5x/libraries/drivers/drv_uart.c
@@ -165,7 +165,10 @@ static rt_err_t _uart_ctrl(struct rt_serial_device *serial, int cmd, void *arg)
return RT_EOK;
}
-
+RT_WEAK int uart_putc_hook(rt_uint8_t *ch)
+{
+ return -1;
+}
static int _uart_putc(struct rt_serial_device *serial, char c)
{
drv_uart_cfg_t *instance = NULL;
@@ -180,6 +183,7 @@ static int _uart_putc(struct rt_serial_device *serial, char c)
nrf_uart_event_clear(instance->uart.p_reg, NRF_UART_EVENT_TXDRDY);
nrf_uart_task_trigger(instance->uart.p_reg, NRF_UART_TASK_STARTTX);
nrf_uart_txd_set(instance->uart.p_reg, (uint8_t)c);
+ uart_putc_hook((rt_uint8_t *)&c);
while (!nrf_uart_event_check(instance->uart.p_reg, NRF_UART_EVENT_TXDRDY))
{
//wait for TXD send
@@ -187,6 +191,11 @@ static int _uart_putc(struct rt_serial_device *serial, char c)
return rtn;
}
+RT_WEAK int uart_getc_hook(rt_uint8_t *ch)
+{
+ return -1;
+};
+
static int _uart_getc(struct rt_serial_device *serial)
{
int ch = -1;
@@ -202,7 +211,22 @@ static int _uart_getc(struct rt_serial_device *serial)
ch = instance->rx_byte;
instance->rx_length--;
}
- return ch;
+
+ if (-1 != ch)
+ {
+ return ch;
+ }
+ else
+ {
+ if (-1 == uart_getc_hook((rt_uint8_t *)&ch))
+ {
+ return -1;
+ }
+ else
+ {
+ return ch;
+ }
+ }
}
static struct rt_uart_ops _uart_ops = {