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 dca8c653312fd197ffa9ce6738812d71d84ce5b8
Author: raiden00pl <[email protected]>
AuthorDate: Sat Aug 7 14:25:05 2021 +0200

    drivers/qencoder: add command to set the maximum encoder position
---
 drivers/sensors/qencoder.c       | 18 ++++++++++++++++++
 include/nuttx/sensors/qencoder.h |  9 ++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/drivers/sensors/qencoder.c b/drivers/sensors/qencoder.c
index 1ea96de..56cf10b 100644
--- a/drivers/sensors/qencoder.c
+++ b/drivers/sensors/qencoder.c
@@ -310,6 +310,24 @@ static int qe_ioctl(FAR struct file *filep, int cmd, 
unsigned long arg)
         }
         break;
 
+      /* QEIOC_SETPOSMAX - Set the maximum encoder position.
+       *   Argument: uint32
+       */
+
+      case QEIOC_SETPOSMAX:
+        {
+          uint32_t maxpos = (uint32_t)arg;
+          if (lower->ops->setposmax != NULL)
+            {
+              ret = lower->ops->setposmax(lower, maxpos);
+            }
+          else
+            {
+              ret = -ENOTTY;
+            }
+        }
+        break;
+
       /* Any unrecognized IOCTL commands might be platform-specific ioctl
        * commands
        */
diff --git a/include/nuttx/sensors/qencoder.h b/include/nuttx/sensors/qencoder.h
index 81a783d..7adc939 100644
--- a/include/nuttx/sensors/qencoder.h
+++ b/include/nuttx/sensors/qencoder.h
@@ -50,13 +50,16 @@
  *   Argument: int32_t pointer to the location to return the position.
  * QEIOC_RESET - Reset the position to zero.
  *   Argument: None
+ * QEIOC_POSMAX - Set the maximum position for the encoder.
+ *   Argument: uint32_t maximum position
  */
 
 #define QEIOC_POSITION     _QEIOC(0x0001) /* Arg: int32_t* pointer */
 #define QEIOC_RESET        _QEIOC(0x0002) /* Arg: None */
+#define QEIOC_SETPOSMAX    _QEIOC(0x0003) /* Arg: uint32_t */
 
 #define QE_FIRST           0x0001         /* First required command */
-#define QE_NCMDS           2              /* Two required commands */
+#define QE_NCMDS           3              /* Two required commands */
 
 /* User defined ioctl commands are also supported. These will be forwarded
  * by the upper-half QE driver to the lower-half QE driver via the ioctl()
@@ -109,6 +112,10 @@ struct qe_ops_s
 
   CODE int (*position)(FAR struct qe_lowerhalf_s *lower, FAR int32_t *pos);
 
+  /* Set the maximum encoder position. */
+
+  CODE int (*setposmax)(FAR struct qe_lowerhalf_s *lower, uint32_t pos);
+
   /* Reset the position measurement to zero. */
 
   CODE int (*reset)(FAR struct qe_lowerhalf_s *lower);

Reply via email to