You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2019/05/23 07:03:31 UTC

[mynewt-core] branch master updated: uart_bitbang; allow configuration without RX.

This is an automated email from the ASF dual-hosted git repository.

marko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 915b5d0  uart_bitbang; allow configuration without RX.
     new 5cbab54  Merge pull request #1835 from mkiiskila/uart_bb_no_rx
915b5d0 is described below

commit 915b5d004b305f644a249bdc785b4a999cbe109b
Author: Marko Kiiskila <ma...@apache.org>
AuthorDate: Wed May 22 11:03:26 2019 +0300

    uart_bitbang; allow configuration without RX.
    
    Submitted by Brian WYLD.
---
 hw/drivers/uart/uart_bitbang/src/uart_bitbang.c | 30 +++++++++++++++++++------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/hw/drivers/uart/uart_bitbang/src/uart_bitbang.c b/hw/drivers/uart/uart_bitbang/src/uart_bitbang.c
index 0963c79..9819b2a 100644
--- a/hw/drivers/uart/uart_bitbang/src/uart_bitbang.c
+++ b/hw/drivers/uart/uart_bitbang/src/uart_bitbang.c
@@ -118,6 +118,9 @@ uart_bitbang_rx_timer(void *arg)
     struct uart_bitbang *ub = (struct uart_bitbang *)arg;
     int val;
 
+    if (ub->ub_rx.pin < 0) {
+        return;
+    }
     val = hal_gpio_read(ub->ub_rx.pin);
 
     if (val) {
@@ -154,6 +157,10 @@ uart_bitbang_isr(void *arg)
     struct uart_bitbang *ub = (struct uart_bitbang *)arg;
     uint32_t time;
 
+    if (ub->ub_rx.pin < 0) {
+        return;
+    }
+
     time = os_cputime_get32();
     if (ub->ub_rx.start - time < (9 * ub->ub_bittime)) {
         ++ub->ub_rx.false_irq;
@@ -224,6 +231,11 @@ uart_bitbang_start_rx(struct uart_dev *dev)
     int rc;
 
     ub = (struct uart_bitbang *)dev->ud_priv;
+
+    if (ub->ub_rx.pin < 0) {
+        return;
+    }
+
     if (ub->ub_rx_stall) {
         rc = ub->ub_rx_func(ub->ub_func_arg, ub->ub_rx.byte);
         if (rc == 0) {
@@ -263,12 +275,13 @@ uart_bitbang_config(struct uart_bitbang *ub, int32_t baudrate, uint8_t databits,
         return -1;
     }
 
-    if (hal_gpio_irq_init(ub->ub_rx.pin, uart_bitbang_isr, ub,
-        HAL_GPIO_TRIG_FALLING, HAL_GPIO_PULL_UP)) {
-        return -1;
+    if (ub->ub_rx.pin >= 0) {
+        if (hal_gpio_irq_init(ub->ub_rx.pin, uart_bitbang_isr, ub,
+            HAL_GPIO_TRIG_FALLING, HAL_GPIO_PULL_UP)) {
+            return -1;
+        }
+        hal_gpio_irq_enable(ub->ub_rx.pin);
     }
-    hal_gpio_irq_enable(ub->ub_rx.pin);
-
     ub->ub_open = 1;
     return 0;
 }
@@ -304,8 +317,11 @@ uart_bitbang_close(struct os_dev *odev)
 
     ub = (struct uart_bitbang *)dev->ud_priv;
     OS_ENTER_CRITICAL(sr);
-    hal_gpio_irq_disable(ub->ub_rx.pin);
-    hal_gpio_irq_release(ub->ub_rx.pin);
+
+    if (ub->ub_rx.pin >= 0) {
+        hal_gpio_irq_disable(ub->ub_rx.pin);
+        hal_gpio_irq_release(ub->ub_rx.pin);
+    }
     ub->ub_open = 0;
     ub->ub_txing = 0;
     ub->ub_rx_stall = 0;