phidget: CPhidgetEncoder bindings added

[email protected] (Ludovic Courtès)
Newsgroups gmane.lisp.scheme.bigloo
Message-ID <[email protected]>
Hello,

FYI I have extended the libphidget bindings in Bigloo with wrappers for
CPhidgetEncoder [0].

Ludo’.

[0] http://www.phidgets.com/documentation/web/cdoc/group__phidenc.html
(unnamed) (text/x-patch, 29.4 KB)
changeset:   1653:3c92f86e5caa
branch:      4.1
tag:         tip
parent:      1651:2641868913cd
user:        Ludovic Courtès <[email protected]>
date:        Tue Sep 03 17:39:00 2013 +0200
summary:     phidget: Add bindings for CPhidgetEncoder.

	Modified   api/phidget/examples/motor-control.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/examples/motor-control.scm
--- a/api/phidget/examples/motor-control.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/examples/motor-control.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -6,7 +6,8 @@
 ;*    -------------------------------------------------------------    */
 ;*    Motor control example                                            */
 ;*    -------------------------------------------------------------    */
-;*    Control motors such as the Phidget Motor Control HC 1064.        */
+;*    Control motors such as the Phidget Motor Control HC 1064,        */
+;*    and check encoders such as the Phidget 1047.                     */
 ;*---------------------------------------------------------------------*/
 
 ;*---------------------------------------------------------------------*/
@@ -16,6 +17,20 @@
    (library pthread phidget)
    (main main))
 
+(define (parse-arguments argv)
+   ;; Return the chosen motor index and encoder index.
+   (match-case argv
+      ((?-)
+       (values 0 0))
+      ((?- ?index)
+       (values (string->number index) 0))
+      ((?- ?motor-index ?encoder-index)
+       (values (string->number motor-index) (string->number encoder-index)))
+      (?-
+       (display "Usage: motor-control [MOTOR-INDEX [ENCODER-INDEX]]\n"
+          (current-error-port))
+       (exit 1))))
+
 ;*---------------------------------------------------------------------*/
 ;*    main ...                                                         */
 ;*---------------------------------------------------------------------*/
@@ -25,42 +40,46 @@
    (define halted
       (make-condition-variable))
 
-   (let ((mc    (instantiate::phidget-motor-control))
-         (index (match-case argv
-                            ((?-)
-                             0)
-                            ((?- ?index)
-                             (string->number index))
-                            (?-
-                             (display "Usage: motor-control MOTOR-INDEX\n"
-                                      (current-error-port))
-                             (exit 1)))))
-     (phidget-open mc)
-     (phidget-wait-for-attachment mc 1000)
+   (receive (motor-index encoder-index)
+      (parse-arguments argv)
+      (let ((mc (instantiate::phidget-motor-control))
+            (e  (instantiate::phidget-encoder)))
+         (phidget-open mc)
+         (phidget-wait-for-attachment mc 1000)
 
-     ;; Note: We actually need to use the CPhidgetEncoder API to access the
-     ;; Phidget 1047 encoders.
-     (tprint "mc=" mc " "
-        (phidget-motor-control-encoder-count mc)
-        " encoders")
+         (phidget-open e)
+         (phidget-wait-for-attachment e 1000)
 
-     (phidget-motor-control-acceleration-set! mc index 4.)
-     (phidget-motor-control-velocity-set! mc index 50.)
-     (phidget-motor-control-braking-set! mc index 0.)
-     (phidget-add-event-listener! mc "velocity"
-        (lambda (event)
-           (with-access::phidget-motorcontrolvelocity-event event
-                 (index velocity)
-              (when (zero? velocity)
-                 (condition-variable-signal! halted))
-              (printf "motor ~a: velocity = ~5d; current = ~12d~%"
-                 index velocity
-                 (phidget-motor-control-current mc index)))))
-     (sleep 1000000)
+         (phidget-encoder-enable! e encoder-index)
+         (tprint "encoder enabled?" (phidget-encoder-enabled? e encoder-index))
 
-     (synchronize lock
-        (phidget-motor-control-velocity-set! mc index 0.)
-        (condition-variable-wait! halted lock))
-     (print "done\n")
-     (phidget-motor-control-braking-set! mc index 100.)
-     #f))
+         ;; Note: We actually need to use the CPhidgetEncoder API to access the
+         ;; Phidget 1047 encoders.
+         (tprint "mc=" mc " "
+            (phidget-motor-control-encoder-count mc)
+            " on-motor encoders; "
+            (with-access::phidget-encoder e (encoder-count)
+               encoder-count)
+            " encoders")
+
+         (phidget-motor-control-acceleration-set! mc motor-index 4.)
+         (phidget-motor-control-velocity-set! mc motor-index 50.)
+         (phidget-motor-control-braking-set! mc motor-index 0.)
+         (phidget-add-event-listener! mc "velocity"
+            (lambda (event)
+               (with-access::phidget-motorcontrolvelocity-event event
+                     (index velocity)
+                  (when (zero? velocity)
+                     (condition-variable-signal! halted))
+                  (printf "motor ~a: velocity = ~5d; current = ~12d; position = ~5d~%"
+                     motor-index velocity
+                     (phidget-motor-control-current mc index)
+                     (phidget-encoder-position e encoder-index)))))
+         (sleep 1000000)
+
+         (synchronize lock
+            (phidget-motor-control-velocity-set! mc motor-index 0.)
+            (condition-variable-wait! halted lock))
+         (print "done\n")
+         (phidget-motor-control-braking-set! mc motor-index 100.)
+         #f)))
	Modified   api/phidget/src/Clib/bglphidget.c
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Clib/bglphidget.c
--- a/api/phidget/src/Clib/bglphidget.c	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Clib/bglphidget.c	Tue Sep 03 17:39:00 2013 +0200
@@ -55,6 +55,9 @@
 #define EVENT_STEPPERCURRENT 16
 #define EVENT_MOTORCONTROLVELOCITY 17
 #define EVENT_MOTORCONTROLCURRENT 18
+#define EVENT_ENCODERINPUT 19
+#define EVENT_ENCODERPOSITION 20
+#define EVENT_ENCODERINDEX 21
 
 #define INITIAL_MAX_HANDLER 40
 static struct handler *handlers;
@@ -115,6 +118,19 @@
 	 int index;
 	 double current;
       } motorcontrolcurrent;
+      struct {
+	 int index;
+	 int state;
+      } encoderinput;
+      struct {
+	 int index;
+	 int time;
+	 int position;
+      } encoderposition;
+      struct {
+	 int index;
+	 int position;
+      } encoderindex;
    } event;
 };
 
@@ -302,6 +318,29 @@
 	       cb->event.motorcontrolcurrent.current );
 	    break;
 	 }
+	 case EVENT_ENCODERINPUT: {
+	    event = bgl_phidget_event_encoderinput_new(
+	       hdl->obj,
+	       cb->event.encoderinput.index,
+	       cb->event.encoderinput.state );
+	    break;
+	 }
+	 case EVENT_ENCODERINDEX: {
+	    event = bgl_phidget_event_encoderindex_new(
+	       hdl->obj,
+	       cb->event.encoderindex.index,
+	       cb->event.encoderindex.position );
+	    break;
+	 }
+	 case EVENT_ENCODERPOSITION: {
+	    event = bgl_phidget_event_encoderposition_new(
+	       hdl->obj,
+	       cb->event.encoderposition.index,
+	       cb->event.encoderposition.time,
+	       cb->event.encoderposition.position );
+	    break;
+	 }
+
 	 default:
 	    event = BUNSPEC;
 	    C_SYSTEM_FAILURE(
@@ -1520,3 +1559,175 @@
 bgl_phidget_motor_control_get_current( CPhidgetMotorControlHandle phid, int i, obj_t o ) {
    FIELD_INDEXED_GET( phid, Current, CPhidgetMotorControl, double, i, o );
 }
+
+
+
+/*---------------------------------------------------------------------*/
+/*    static int                                                       */
+/*    bgl_encoderinput_handler ...                                     */
+/*---------------------------------------------------------------------*/
+static int
+bgl_encoderinput_handler( CPhidgetEncoderHandle id, void *ptr, int index, int state ) {
+   bgl_phidget_lock();
+
+   if( callback_index == callback_length ) enlarge_callback_array();
+
+   callbacks[ callback_index ].event.encoderinput.index = index;
+   callbacks[ callback_index ].event.encoderinput.state = state;
+   callbacks[ callback_index++ ].handler = (struct handler *)ptr;
+
+   bgl_phidget_signal();
+   bgl_phidget_unlock();
+
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+/*    static int                                                       */
+/*    bgl_encoderposition_handler ...                                  */
+/*---------------------------------------------------------------------*/
+static int
+bgl_encoderposition_handler( CPhidgetEncoderHandle id, void *ptr, int index, int time, int pos ) {
+   bgl_phidget_lock();
+
+   if( callback_index == callback_length ) enlarge_callback_array();
+
+   callbacks[ callback_index ].event.encoderposition.index = index;
+   callbacks[ callback_index ].event.encoderposition.time = time;
+   callbacks[ callback_index ].event.encoderposition.position = pos;
+   callbacks[ callback_index++ ].handler = (struct handler *)ptr;
+
+   bgl_phidget_signal();
+   bgl_phidget_unlock();
+
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+/*    static int                                                       */
+/*    bgl_encoderindex_handler ...                                     */
+/*---------------------------------------------------------------------*/
+static int
+bgl_encoderindex_handler( CPhidgetEncoderHandle id, void *ptr, int index, int position ) {
+   bgl_phidget_lock();
+
+   if( callback_index == callback_length ) enlarge_callback_array();
+
+   callbacks[ callback_index ].event.encoderindex.index = index;
+   callbacks[ callback_index ].event.encoderindex.position = position;
+   callbacks[ callback_index++ ].handler = (struct handler *)ptr;
+
+   bgl_phidget_signal();
+   bgl_phidget_unlock();
+
+   return 0;
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_add_event_listener ...                       */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_add_event_listener( CPhidgetEncoderHandle id, char *event, obj_t obj, obj_t proc ) {
+   if( !strcmp( event, "input" ) ) {
+      struct handler *hdl = bgl_add_handler( obj, proc, EVENT_ENCODERINPUT );
+
+      return CPhidgetEncoder_set_OnInputChange_Handler(
+	 id, &bgl_encoderinput_handler, hdl );
+   }
+   else if( !strcmp( event, "position" ) ) {
+      struct handler *hdl = bgl_add_handler( obj, proc, EVENT_ENCODERPOSITION );
+
+      return CPhidgetEncoder_set_OnPositionChange_Handler(
+	 id, &bgl_encoderposition_handler, hdl );
+   }
+   else if( !strcmp( event, "index" ) ) {
+      struct handler *hdl = bgl_add_handler( obj, proc, EVENT_ENCODERINDEX );
+
+      return CPhidgetEncoder_set_OnIndex_Handler(
+	 id, &bgl_encoderindex_handler, hdl );
+   }
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_input_count ...                          */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_input_count( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+  int err, count;
+
+  err = CPhidgetEncoder_getInputCount( phid, &count);
+  return err == EPHIDGET_OK
+    ? count
+    : (bgl_phidget_error( "EncoderCount", err, o ), count);
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_encoder_count ...                        */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_encoder_count( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+  int err, count;
+
+  err = CPhidgetEncoder_getEncoderCount( phid, &count);
+  return err == EPHIDGET_OK
+    ? count
+    : (bgl_phidget_error( "EncoderCount", err, o ), count);
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_input_enabled ...                        */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_input_enabled( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_position ...                             */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_position( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_index_position ...                       */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_index_position( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_get_enabled ...                             */
+/*---------------------------------------------------------------------*/
+int
+bgl_phidget_encoder_get_enabled( CPhidgetEncoderHandle phid, int i, obj_t o ) {
+   FIELD_INDEXED_GET( phid, InputState, CPhidgetEncoder, int, i, o );
+}
+
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_enable ...                                   */
+/*---------------------------------------------------------------------*/
+void
+bgl_phidget_encoder_enable( CPhidgetEncoderHandle phid, int i ) {
+   CPhidgetEncoder_setEnabled( phid, i, PTRUE );
+}
+
+/*---------------------------------------------------------------------*/
+/*    int                                                              */
+/*    bgl_phidget_encoder_disable ...                                  */
+/*---------------------------------------------------------------------*/
+void
+bgl_phidget_encoder_disable( CPhidgetEncoderHandle phid, int i ) {
+   CPhidgetEncoder_setEnabled( phid, i, PFALSE );
+}
	Modified   api/phidget/src/Clib/bglphidget.h
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Clib/bglphidget.h
--- a/api/phidget/src/Clib/bglphidget.h	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Clib/bglphidget.h	Tue Sep 03 17:39:00 2013 +0200
@@ -37,6 +37,9 @@
 #define BGL_PHIDGET_MOTOR_CONTROL_BUILTIN( o ) \
    ((CPhidgetMotorControlHandle *)(&(((BgL_phidgetzd2motorzd2controlz00_bglt)o)->BgL_z42builtinz42)))
 
+#define BGL_PHIDGET_ENCODER_BUILTIN( o ) \
+   ((CPhidgetEncoderHandle *)(&(((BgL_phidgetzd2encoderzd2_bglt)o)->BgL_z42builtinz42)))
+
 extern void bgl_phidget_init();
 
 extern int bgl_phidget_manager_add_event_listener(
@@ -69,6 +72,9 @@
 extern obj_t bgl_phidget_event_steppercurrent_new( obj_t, int, double);
 extern obj_t bgl_phidget_event_motorcontrolvelocity_new( obj_t, int, double);
 extern obj_t bgl_phidget_event_motorcontrolcurrent_new( obj_t, int, double);
+extern obj_t bgl_phidget_event_encoderinput_new( obj_t, int, int );
+extern obj_t bgl_phidget_event_encoderindex_new( obj_t, int, int );
+extern obj_t bgl_phidget_event_encoderposition_new( obj_t, int, int, int );
 
 extern obj_t bgl_phidget_get_device_name( CPhidgetHandle );
 extern obj_t bgl_phidget_get_device_type( CPhidgetHandle );
	Modified   api/phidget/src/Llib/pdg.sch
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdg.sch
--- a/api/phidget/src/Llib/pdg.sch	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Llib/pdg.sch	Tue Sep 03 17:39:00 2013 +0200
@@ -4,7 +4,7 @@
 ;*    Author      :  Manuel Serrano                                    */
 ;*    Creation    :  Sun Dec 30 15:28:51 2007                          */
 ;*    Last change :  Thu Oct  4 18:07:52 2012 (serrano)                */
-;*    Copyright   :  2007-12 Manuel Serrano                            */
+;*    Copyright   :  2007-13 Inria                                     */
 ;*    -------------------------------------------------------------    */
 ;*    Direct use of PHIDGET functions                                  */
 ;*=====================================================================*/
@@ -486,7 +486,7 @@
 	 (::$pdg-phidget)
 	 "(CPhidgetMotorControlHandle)")
       (macro $pdg-phidget-motor-control-add-event-listener!::int
-	 (::$pdg-manager ::string ::obj ::procedure)
+	 (::$pdg-motor-control ::string ::obj ::procedure)
 	 "bgl_phidget_motor_control_add_event_listener")
 
       ($pdg-phidget-motor-control-get-motor-count::int
@@ -527,7 +527,43 @@
          "CPhidgetMotorControl_setBraking")
       ($pdg-phidget-motor-control-get-current::double
          (::$pdg-motor-control ::int ::obj)
-         "bgl_phidget_motor_control_get_current")))
+         "bgl_phidget_motor_control_get_current")
+
+      ;; encoder
+      (type $pdg-encoder void* "CPhidgetEncoderHandle")
+      (type $pdg-encoder* void* "CPhidgetEncoderHandle *")
+      (macro $pdg-encoder-create::int (::$pdg-encoder*)
+             "CPhidgetEncoder_create")
+
+      (macro $pdg-encoder->phidget::$pdg-phidget (::$pdg-encoder)
+             "(CPhidgetHandle)")
+      (macro $pdg-phidget->encoder::$pdg-encoder (::$pdg-phidget)
+             "(CPhidgetEncoderHandle)")
+      (macro $pdg-phidget-encoder-add-event-listener!::int
+         (::$pdg-encoder ::string ::obj ::procedure)
+         "bgl_phidget_encoder_add_event_listener")
+
+      ($pdg-phidget-encoder-get-encoder-count::int (::$pdg-encoder ::obj)
+         "bgl_phidget_encoder_get_encoder_count")
+      ($pdg-phidget-encoder-get-input-count::int (::$pdg-encoder ::obj)
+         "bgl_phidget_encoder_get_input_count")
+      ($pdg-phidget-encoder-get-input-enabled?::bool (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_input_enabled")
+      ($pdg-phidget-encoder-get-position::int (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_position")
+      (macro $pdg-phidget-encoder-set-position!::int
+         (::$pdg-encoder ::int ::int)
+         "CPhidgetEncoder_setPosition")
+      ($pdg-phidget-encoder-get-index-position::int
+         (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_index_position")
+
+      ($pdg-phidget-encoder-get-enabled?::bool (::$pdg-encoder ::int ::obj)
+         "bgl_phidget_encoder_get_enabled")
+      (macro $pdg-phidget-encoder-enable!::int (::$pdg-encoder ::int)
+             "bgl_phidget_encoder_enable")
+      (macro $pdg-phidget-encoder-disable!::int (::$pdg-encoder ::int)
+             "bgl_phidget_encoder_disable")))
 
 ;*---------------------------------------------------------------------*/
 ;*    phidget-return ...                                               */
	New        api/phidget/src/Llib/pdgencoder.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdgencoder.scm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/api/phidget/src/Llib/pdgencoder.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -0,0 +1,119 @@
+;*=====================================================================*/
+;*    .../prgm/project/bigloo/api/phidget/src/Llib/pdgencoder.scm      */
+;*    -------------------------------------------------------------    */
+;*    Author      :  Ludovic Courtès                                   */
+;*    Creation    :  Tue Mar 27 09:11:24 2012                          */
+;*    Last change :  Mon Sep  2 11:15:36 CEST 2013                     */
+;*    Copyright   :  2013 Inria                                        */
+;*    -------------------------------------------------------------    */
+;*    Phidget Encoders                                                 */
+;*=====================================================================*/
+
+;*---------------------------------------------------------------------*/
+;*    The module                                                       */
+;*---------------------------------------------------------------------*/
+(module __phidget_encoder
+
+   (include "pdg.sch")
+
+   (extern (export $make-encoder "bgl_encoder_new")
+	   (macro $pdg-encoder-builtin&::$pdg-encoder*
+	      (::phidget-encoder)
+	      "BGL_PHIDGET_ENCODER_BUILTIN"))
+
+   (import __phidget_types
+	   __phidget_ctypes
+	   __phidget
+	   __phidget_event
+	   __phidget_phidget)
+
+   (export  (class phidget-encoder::phidget
+	       (encoder-count::int
+		  read-only
+		  (get (lambda (o)
+			  (with-access::phidget o ($builtin)
+			     ($pdg-phidget-encoder-get-encoder-count
+				($pdg-phidget->encoder $builtin) o))))))
+
+            (phidget-encoder-input-count::int ::phidget-encoder)
+            (phidget-encoder-input-enabled?::bool ::phidget-encoder ::int)
+
+            (phidget-encoder-position::int ::phidget-encoder ::int)
+            (phidget-encoder-position-set! ::phidget-encoder ::int ::int)
+            (phidget-encoder-index-position::int ::phidget-encoder ::int)
+
+            (phidget-encoder-enabled?::bool ::phidget-encoder ::int)
+            (phidget-encoder-enable! ::phidget-encoder ::int)
+            (phidget-encoder-disable! ::phidget-encoder ::int)
+
+            ($make-encoder::obj ::$pdg-encoder)))
+
+;*---------------------------------------------------------------------*/
+;*    $make-encoder ...                                         */
+;*---------------------------------------------------------------------*/
+(define ($make-encoder mc::$pdg-encoder)
+   (instantiate::phidget-encoder
+      ($builtin ($pdg-encoder->phidget mc))))
+
+;*---------------------------------------------------------------------*/
+;*    %phidget-init ...                                                */
+;*---------------------------------------------------------------------*/
+(define-method (%phidget-init o::phidget-encoder)
+   (phidget-init!)
+   (phidget-return
+      ($pdg-encoder-create ($pdg-encoder-builtin& o))
+      "phidget-encoder" o))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-add-event-listener! ::phidget-encoder ...          */
+;*---------------------------------------------------------------------*/
+(define-method (phidget-add-event-listener! o::phidget-encoder event proc)
+   (with-access::phidget-encoder o ($builtin)
+      (phidget-return
+       ($pdg-phidget-encoder-add-event-listener!
+	($pdg-phidget->encoder $builtin) event o proc)
+       "phidget-add-event-listener!" o)))
+
+
+(define-syntax define-getter
+   (syntax-rules ()
+      ((_ name dollar-name)
+       (define (name o i)
+          (with-access::phidget o ($builtin)
+             (dollar-name ($pdg-phidget->encoder $builtin)
+                i o))))))
+
+(define-syntax define-setter
+   (syntax-rules ()
+      ((_ name dollar-name)
+       (define (name o i v)
+          (with-access::phidget o ($builtin)
+             (dollar-name ($pdg-phidget->encoder $builtin)
+                i v))))))
+
+(define-getter phidget-encoder-input-enabled?
+   $pdg-phidget-encoder-get-input-enabled?)
+(define-getter phidget-encoder-position
+   $pdg-phidget-encoder-get-position)
+(define-setter phidget-encoder-position-set!
+   $pdg-phidget-encoder-set-position!)
+(define-getter phidget-encoder-index-position
+   $pdg-phidget-encoder-get-index-position)
+(define-getter phidget-encoder-enabled?
+   $pdg-phidget-encoder-get-enabled?)
+
+(define (phidget-encoder-enable! e::phidget-encoder i::int)
+   (with-access::phidget e ($builtin)
+      ($pdg-phidget-encoder-enable! ($pdg-phidget->encoder $builtin) i)))
+
+(define (phidget-encoder-disable! e::phidget-encoder i::int)
+   (with-access::phidget e ($builtin)
+      ($pdg-phidget-encoder-disable! ($pdg-phidget->encoder $builtin) i)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-encoder-input-count ...                                  */
+;*---------------------------------------------------------------------*/
+(define (phidget-encoder-input-count o)
+   (with-access::phidget o ($builtin)
+      ($pdg-phidget-encoder-get-input-count
+	 ($pdg-phidget->encoder $builtin) o)))
	Modified   api/phidget/src/Llib/pdgevent.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdgevent.scm
--- a/api/phidget/src/Llib/pdgevent.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Llib/pdgevent.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -42,7 +42,10 @@
 	   (export phidget-event-stepperposition-new "bgl_phidget_event_stepperposition_new")
 	   (export phidget-event-steppercurrent-new "bgl_phidget_event_steppercurrent_new")
            (export phidget-event-motorcontrolvelocity-new "bgl_phidget_event_motorcontrolvelocity_new")
-	   (export phidget-event-motorcontrolcurrent-new "bgl_phidget_event_motorcontrolcurrent_new"))
+	   (export phidget-event-motorcontrolcurrent-new "bgl_phidget_event_motorcontrolcurrent_new")
+           (export phidget-event-encoderinput-new "bgl_phidget_event_encoderinput_new")
+           (export phidget-event-encoderposition-new "bgl_phidget_event_encoderposition_new")
+           (export phidget-event-encoderindex-new "bgl_phidget_event_encoderindex_new"))
 
    (export (%phidget-thread-init!)
 	   (%phidget-lock!)
@@ -71,7 +74,11 @@
 	   (phidget-event-stepperposition-new::obj ::obj ::int ::llong)
 	   (phidget-event-steppercurrent-new::obj ::obj ::int ::double)
            (phidget-event-motorcontrolvelocity-new::obj ::obj ::int ::double)
-	   (phidget-event-motorcontrolcurrent-new::obj ::obj ::int ::double)))
+	   (phidget-event-motorcontrolcurrent-new::obj ::obj ::int ::double)
+
+           (phidget-event-encoderinput-new::obj ::obj ::int ::bool)
+           (phidget-event-encoderposition-new::obj ::obj ::int ::int ::int)
+           (phidget-event-encoderindex-new::obj ::obj ::int ::int)))
 
 ;*---------------------------------------------------------------------*/
 ;*    *phidget-mutex* ...                                              */
@@ -300,3 +307,31 @@
       (target target)
       (index index)
       (current current)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-event-encoderinput-new ...                               */
+;*---------------------------------------------------------------------*/
+(define (phidget-event-encoderinput-new target index state)
+   (instantiate::phidget-encoderinput-event
+      (target target)
+      (index index)
+      (state state)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-event-encoderposition-new ...                            */
+;*---------------------------------------------------------------------*/
+(define (phidget-event-encoderposition-new target index time position)
+   (instantiate::phidget-encoderposition-event
+      (target target)
+      (index index)
+      (time time)
+      (position position)))
+
+;*---------------------------------------------------------------------*/
+;*    phidget-event-encoderindex-new ...                               */
+;*---------------------------------------------------------------------*/
+(define (phidget-event-encoderindex-new target index position)
+   (instantiate::phidget-encoderindex-event
+      (target target)
+      (index index)
+      (position position)))
	Modified   api/phidget/src/Llib/pdgtypes.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Llib/pdgtypes.scm
--- a/api/phidget/src/Llib/pdgtypes.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Llib/pdgtypes.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -90,6 +90,19 @@
 	       (index::int read-only)
 	       (current::double read-only))
 
+            (class phidget-encoderinput-event::%phidget-event
+               (index::int read-only)
+               (state::bool read-only))
+
+            (class phidget-encoderposition-event::%phidget-event
+               (index::int read-only)
+               (time::int read-only)
+               (position::int read-only))
+
+            (class phidget-encoderindex-event::%phidget-event
+               (index::int read-only)
+               (position::int read-only))
+
 	    (generic %phidget-init ::%phidget)))
 
 ;*---------------------------------------------------------------------*/
	Modified   api/phidget/src/Makefile
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Makefile
--- a/api/phidget/src/Makefile	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Makefile	Tue Sep 03 17:39:00 2013 +0200
@@ -63,7 +63,7 @@
 #*---------------------------------------------------------------------*/
 _BGL_OBJECTS	= phidget pdgtypes pdg pdglogging pdgmanager pdgstepper	\
                   pdgphidget pdgifkit pdgspatial pdgservo pdgaservo	\
-		  pdgevent pdgmotorcontrol
+		  pdgevent pdgmotorcontrol pdgencoder
 
 _C_OBJECTS	= bglphidget
 _JAVA_CLASSES	= 
	Modified   api/phidget/src/Misc/make_lib.scm
diff -r 2641868913cd -r 3c92f86e5caa api/phidget/src/Misc/make_lib.scm
--- a/api/phidget/src/Misc/make_lib.scm	Fri Aug 02 07:53:28 2013 +0200
+++ b/api/phidget/src/Misc/make_lib.scm	Tue Sep 03 17:39:00 2013 +0200
@@ -26,7 +26,8 @@
 	    __phidget_servo
 	    __phidget_advanced-servo
 	    __phidget_stepper
-            __phidget_motor-control)
+            __phidget_motor-control
+            __phidget_encoder)
 
    (eval    (export-all)
 
@@ -57,4 +58,5 @@
 	    (class phidget-servo)
 	    (class phidget-advanced-servo)
 	    (class phidget-stepper)
-            (class phidget-motor-control)))
+            (class phidget-motor-control)
+            (class phidget-encoder)))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.