You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2020/06/29 12:05:52 UTC
[incubator-nuttx] 01/04: stm32f7: add CANIOC_SET_NART and
CANIOC_SET_ABOM ioctl's to can driver
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit f6039bbfa7d64c3d4d54f82e703d39f53794f66b
Author: Beat Küng <be...@gmx.net>
AuthorDate: Tue Apr 21 14:21:00 2020 +0200
stm32f7: add CANIOC_SET_NART and CANIOC_SET_ABOM ioctl's to can driver
---
arch/arm/src/stm32f7/stm32_can.c | 44 ++++++++++++++++++++++++++++++++++++++++
include/nuttx/can/can.h | 22 +++++++++++++++++++-
2 files changed, 65 insertions(+), 1 deletion(-)
diff --git a/arch/arm/src/stm32f7/stm32_can.c b/arch/arm/src/stm32f7/stm32_can.c
index d68c4ab..6c76472 100644
--- a/arch/arm/src/stm32f7/stm32_can.c
+++ b/arch/arm/src/stm32f7/stm32_can.c
@@ -1134,6 +1134,50 @@ static int stm32can_ioctl(FAR struct can_dev_s *dev, int cmd,
}
break;
+ case CANIOC_SET_NART:
+ {
+ uint32_t regval;
+ ret = stm32can_enterinitmode(priv);
+ if (ret != 0)
+ {
+ return ret;
+ }
+ regval = stm32can_getreg(priv, STM32_CAN_MCR_OFFSET);
+ if (arg == 1)
+ {
+ regval |= CAN_MCR_NART;
+ }
+ else
+ {
+ regval &= ~CAN_MCR_NART;
+ }
+ stm32can_putreg(priv, STM32_CAN_MCR_OFFSET, regval);
+ return stm32can_exitinitmode(priv);
+ }
+ break;
+
+ case CANIOC_SET_ABOM:
+ {
+ uint32_t regval;
+ ret = stm32can_enterinitmode(priv);
+ if (ret != 0)
+ {
+ return ret;
+ }
+ regval = stm32can_getreg(priv, STM32_CAN_MCR_OFFSET);
+ if (arg == 1)
+ {
+ regval |= CAN_MCR_ABOM;
+ }
+ else
+ {
+ regval &= ~CAN_MCR_ABOM;
+ }
+ stm32can_putreg(priv, STM32_CAN_MCR_OFFSET, regval);
+ return stm32can_exitinitmode(priv);
+ }
+ break;
+
/* Unsupported/unrecognized command */
default:
diff --git a/include/nuttx/can/can.h b/include/nuttx/can/can.h
index f462832..d1cd37d 100644
--- a/include/nuttx/can/can.h
+++ b/include/nuttx/can/can.h
@@ -197,6 +197,24 @@
* is returned with the errno variable set to indicate the
* nature of the error.
* Dependencies: None
+ *
+ * CANIOC_SET_NART:
+ * Description: Enable/Disable NART (No Automatic Retry)
+ * Argument: Set to 1 to enable NART, 0 to disable. Default is
+ * disabled.
+ * Returned Value: Zero (OK) is returned on success. Otherwise -1 (ERROR)
+ * is returned with the errno variable set to indicate the
+ * nature of the error.
+ * Dependencies: None
+ *
+ * CANIOC_SET_ABOM:
+ * Description: Enable/Disable ABOM (Automatic Bus-off Management)
+ * Argument: Set to 1 to enable ABOM, 0 to disable. Default is
+ * disabled.
+ * Returned Value: Zero (OK) is returned on success. Otherwise -1 (ERROR)
+ * is returned with the errno variable set to indicate the
+ * nature of the error.
+ * Dependencies: None
*/
#define CANIOC_RTR _CANIOC(1)
@@ -209,9 +227,11 @@
#define CANIOC_GET_CONNMODES _CANIOC(8)
#define CANIOC_SET_CONNMODES _CANIOC(9)
#define CANIOC_BUSOFF_RECOVERY _CANIOC(10)
+#define CANIOC_SET_NART _CANIOC(11)
+#define CANIOC_SET_ABOM _CANIOC(12)
#define CAN_FIRST 0x0001 /* First common command */
-#define CAN_NCMDS 10 /* Ten common commands */
+#define CAN_NCMDS 12 /* Ten common commands */
/* User defined ioctl commands are also supported. These will be forwarded
* by the upper-half CAN driver to the lower-half CAN driver via the co_ioctl()